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
Gotland Ring Bike Week, välbokat trots turbulens i bolaget!

Det är med glädje vi pratar...

Danske Vilh. Nellemann övertar Honda-importen i Sverige

Äntligen är frågan om vem s...

Danske Vilh. Nellemann övertar Honda-importen i Sverige

Äntligen är frågan om vem s...

Harley‑Davidson ”Creators Custom Clash”

Harley‑Davidson drar igång ...

Di Giannantonio tillbaka som vinnare!

Fabio Di Giannantonio är fö...

The Distinguished Gentlemans’s Ride – Körs i morgon!

Den 17 maj är det åter dags...

GOTLAND GRAND NATIONAL OCH AFTONBLADET SÄNDER 12 TIMMAR LIVE FRÅN ÅRETS TÄVLING!

Foto: Karin Tornblom Pre...

Allt om MC på Rapidos öppet hus!

Kom och hälsa på Rapido MCK...

Bike på Rapidos öppet hus!

Kom och hälsa på Rapido MCK...

Stabilt läge på Gotland Ring!

Den trista dispyten om ägan...

Back
Top