Någon som kan LINQ?

newstead

vårkänslor
Gick med
8 Mar 2003
Ort
Solna
Hoj
Hilfe!
Mina gamla .Net-böcker har inte riktigt hängt med i utvecklingen. Ska implementera FirstOrDefault men jag har aldrig använt LINQ och hittar inget begripligt på nätet. Är hyfsat nära men om det är någon som har bättre koll så kanske det fixar sig hela vägen. Nån som har någon idé? Det är det rödmarkerade det handlar om...

Metodsignatur 1:
Code:
public static TSource FirstOrDefault<TSource>(
    this IEnumerable<TSource> source)

Pseudokod 1:
Code:
If source is null, throw an ArgumentNullException.
If the source sequence implements IList<T>, then 
    If the source sequence is empty return default(TSource);.
    Return source[0]. (performance optomization)
Else Iterate the source sequence.
    If there is no first element, return default(TSource);.
    Return the first (current element) element.

Lösningsförslag 1:
Code:
public static TSource FirstOrDefault<TSource>(
            this IEnumerable<TSource> source)
        {  
            if (source == null)
                throw new ArgumentNullException();
            if (source is IList<TSource>)
            {
                if (source.Count<TSource>() == 0)
                    return default(TSource);
                return source.ElementAt<TSource>(0);
            }
            else
                [COLOR="red"]foreach (TSource element in source)
                //om det inte finns något element i source kommer aldrig foreach 
                //att köras, hur ska jag då kunna iterera igenom source?
                {    
                    if(element == null)
                        return (TSource)source.DefaultIfEmpty<TSource>();
                    else
                        return element;[/COLOR]        
                }
}
 
Last edited:
EDIT: hoppas ingen såg det för det jag tänkte på ska inte ställa till problem :huvet
 
Last edited:
Är förmodligen för trött för det här nu men det här är den enda lösningen jag kom på:

Code:
public static TSource FirstOrDefault<TSource>(
            this IEnumerable<TSource> source)
        {  
            if (source == null)
                throw new ArgumentNullException();
            if (source is IList<TSource>)
            {
                if (source.Count<TSource>() == 0)
                    return default(TSource);
                return source.ElementAt<TSource>(0);
            }
            else
                foreach (TSource element in source)
                    if(source.Count<TSource>() == 0)
                        return default(TSource);
                return source.First<TSource>();
        }

Känns ändå onödigt att iterera igenom source om det inte skulle finnas något "första" element. Eller? :va
 
Nyheter
Yamaha R7-vinnarens rapport: ”Ett riktigt monster på kurviga landsvägar!”

På MC-mässan i vintras anor...

Nisse Hedlund bortgången

Den legendariske motorkonst...

En dag på dragstrippen

Efter att ha varit aktiv so...

Steve McQueens Scott Squirrel till salu

Detta Scott Flying Squirrel...

Dags för Strängnäs Bike Show!

Sista lördagen i augusti är...

Bikeweekend på Kjula denna helg

Den 22-23 augusti är det da...

Motorcycle Inferno #8

Den 5 september blir Laxhol...

Tiotusentals körde Mälaren Runt

Lördagen den 15 augusti gen...

Mälaren Runt fyller 40 år

Nu på lördagen den 15 augus...

Steve Holcombe klar för GGN!

Pressmeddelande 2026-08-10 ...

Back
Top