Konverter C# LINQ til ordbok

Konverter C Linq Til Ordbok



I C# LINQ oppretter du en ordbok fra System.Collections.Generic.IEnumerable er mulig ved å bruke ToDictionary()-metoden. Denne metoden lager en ordbok med fra den gitte . De System.ArgumentNullException kastes hvis datakilden, keySelector eller elementSelector er null. Dessuten, hvis keySelector produserer dupliserte nøkler for to elementer, vil System.ArgumentUnntak blir kastet. I denne veiledningen vil vi diskutere hvordan du lager en ordbok fra listedatakilden ved å overbelaste to metoder.

Syntaks:

1. Hvis du vil lage en ordbok i henhold til spesifiserte nøkkelvelger- og elementvelgerfunksjoner fra den gitte datakilden, overbelast følgende metode:









Parametere:



    1. kilde : Kilde kan være en IEnumerable (liste) der ordboken er opprettet fra denne kilden.
    2. nøkkelvelger : Dette er en funksjon som brukes til å hente nøkkelen fra hvert element.
    3. elementvelger: Dette er en funksjon som brukes til å hente elementet.
    4. TSource : Dette er typeparameteren som spesifiserer typen av datakilden.
    5. TKey: Dette er typeparameteren som spesifiserer nøkkeltypen.
    6. TElement : Dette er typeparameteren som spesifiserer typen element.

2. Hvis du vil lage en ordbok i henhold til den angitte nøkkelvelgerfunksjonen fra den gitte datakilden, overbelast følgende metode:





Parametere:



    1. kilde : Kilde kan være en IEnumerable (liste) der ordboken er opprettet fra denne kilden.
    2. nøkkelvelger : Dette er en funksjon som brukes til å hente nøkkelen fra hvert element.
    3. TKilde: Dette refererer til typen datakilde.
    4. TKey : Den spesifiserer nøkkeltypen.

Eksempel 1: Spesifisert nøkkelvelger og elementvelgerfunksjon

Lag en liste med 'Konto'-typen som inneholder fire attributter (Acc_ID, Acc_Name, Industry, Revenue) med fem poster.

1. Lag en ordbok fra forrige liste med nøkkelen som Acc_ID og Value as Acc_Name.
2. Lag en ordbok fra forrige liste med nøkkelen som Acc_Name og Value as Revenue.

ved hjelp av System ;
ved hjelp av System.Linq ;
ved hjelp av System.Samlinger.Generisk ;

klasse Kontoinformasjon
{
offentlig statisk tomrom Hoved ( )
{
// Opprett liste av type - Konto.
Liste detaljer = ny Liste ( ) ;
// Legg til 5 poster til listen.
detaljer . Legg til ( ny Regnskap { Acc_ID = 1 , Acc_Name = 'Linux' , Industri = 'Utdanning' ,Inntekter = 2500 } ) ;
detaljer . Legg til ( ny Regnskap { Acc_ID = 2 , Acc_Name = 'Python' , Industri = 'Førstegangs tjeneste' ,Inntekter = 10 000 } ) ;
detaljer . Legg til ( ny Regnskap { Acc_ID = 3 , Acc_Name = 'Java' , Industri = 'Utdanning' ,Inntekter = 500 } ) ;
detaljer . Legg til ( ny Regnskap { Acc_ID = 4 , Acc_Name = '.NETT' , Industri = 'Opplæring' ,Inntekter = 2080 } ) ;
detaljer . Legg til ( ny Regnskap { Acc_ID = 5 , Acc_Name = 'Oracle' , Industri = 'Jobb' ,Inntekter = 2090 } ) ;

// Lag en ordbok fra listen ovenfor med nøkkel som Acc_ID og Value som Acc_Name
Konsoll . WriteLine ( ' ----Nøkkel som Acc_ID og Value as Acc_Name----' ) ;
Ordbok kontoer_dikt1 = detaljer . TilDictionary ( j => j . Acc_ID , j => j . Acc_Name ) ;

for hver ( KeyValuePair i i kontoer_dikt1 )
{
Konsoll . WriteLine ( 'Konto-ID:' + Jeg . Nøkkel + ' Brukernavn :' + Jeg . Verdi ) ;
}

// Lag en ordbok fra listen ovenfor med nøkkel som Acc_Name og Value som inntekt
Konsoll . WriteLine ( ' ----Nøkkel som Acc_Name og Value as Revenue----' ) ;
Ordbok kontoer_dikt2 = detaljer . TilDictionary ( l => l . Acc_Name , l => l . Inntekter ) ;

for hver ( KeyValuePair k i kontoer_dikt2 )
{
Konsoll . WriteLine ( 'Brukernavn :' + k . Nøkkel + 'Kontoinntekter:' + k . Verdi ) ;
}

}
}

// Opprett klasse med navn - Konto med fire attributter
offentlig klasse Regnskap
{
offentlig int Acc_ID { ; sett ; }
offentlig streng Acc_Name { ; sett ; }
offentlig streng Industri { ; sett ; }
offentlig int Inntekter { ; sett ; }
}

Produksjon:

Forklaring:

1. Opprett en klasse kalt 'Konto' med fire attributter.

2. I hovedklassen oppretter du en liste av typen 'Konto' og setter inn fem poster i den.

3. Lag en ordbok fra forrige liste med nøkkelen som Acc_ID og Value as Acc_Name. Her spesifiserer vi TKey som int og TElement som streng. Inne i ToDictionary()-metoden sender vi Acc_ID i keySelector og Acc_Name i elementSelector. Til slutt bruker vi 'foreach'-løkken for å iterere ordboken og returnere nøklene og verdiene ved å bruke nøkkel- og verdiegenskapene.

4. Lag en ordbok fra forrige liste med nøkkelen som Acc_Name og verdien som Revenue. Her spesifiserer vi TKey som streng og TElement som int. Inne i ToDictionary()-metoden sender vi Acc_Name i keySelector og Revenue i elementSelector. Til slutt bruker vi 'foreach'-løkken for å iterere ordboken og returnere nøklene og verdiene ved å bruke nøkkel- og verdiegenskapene.

Eksempel 2: Spesifisert nøkkelvelger

Bruk forrige kode og lag en ordbok fra forrige liste med nøkkelen som Acc_ID.

ved hjelp av System ;
ved hjelp av System.Linq ;
ved hjelp av System.Samlinger.Generisk ;

klasse Kontoinformasjon
{
offentlig statisk tomrom Hoved ( )
{
// Opprett liste av type - Konto.
Liste detaljer = ny Liste ( ) ;
// Legg til 5 poster til listen.
detaljer . Legg til ( ny Regnskap { Acc_ID = 1 , Acc_Name = 'Linux' , Industri = 'Utdanning' ,Inntekter = 2500 } ) ;
detaljer . Legg til ( ny Regnskap { Acc_ID = 2 , Acc_Name = 'Python' , Industri = 'Førstegangs tjeneste' ,Inntekter = 10 000 } ) ;
detaljer . Legg til ( ny Regnskap { Acc_ID = 3 , Acc_Name = 'Java' , Industri = 'Utdanning' ,Inntekter = 500 } ) ;
detaljer . Legg til ( ny Regnskap { Acc_ID = 4 , Acc_Name = '.NETT' , Industri = 'Opplæring' ,Inntekter = 2080 } ) ;
detaljer . Legg til ( ny Regnskap { Acc_ID = 5 , Acc_Name = 'Oracle' , Industri = 'Jobb' ,Inntekter = 2090 } ) ;

// Lag en ordbok fra listen ovenfor med nøkkel som Acc_ID.
Ordbok kontoer_dikt = detaljer . TilDictionary ( j => j . Acc_ID ) ;
for hver ( KeyValuePair i i kontoer_dikt )
{
Konsoll . WriteLine ( 'Nøkkel:' + Jeg . Nøkkel + '-->  Kontonavn :' + Jeg . Verdi . Acc_Name
+ ' Konto-industri:' + Jeg . Verdi . Industri
+ 'Kontoinntekter:' + Jeg . Verdi . Inntekter ) ;
}

}
}

// Opprett klasse med navn - Konto med fire attributter
offentlig klasse Regnskap
{
offentlig int Acc_ID { ; sett ; }
offentlig streng Acc_Name { ; sett ; }
offentlig streng Industri { ; sett ; }
offentlig int Inntekter { ; sett ; }
}

Produksjon:

Forklaring:

Her lager vi en ordbok med nøkkelen som Acc_ID. Dette fungerer som nøkkelen for hver post i ordboken som vi opprettet fra listen. Etter det bruker vi 'foreach'-løkken for å få nøklene og verdiene (med attributter) ved å bruke nøkkel- og verdiegenskapene.

Eksempel 3: Dupliserte nøkler – ArgumentException

Lag en liste med to poster og prøv å konvertere den til en ordbok med Acc_ID som nøkkel.

ved hjelp av System ;
ved hjelp av System.Linq ;
ved hjelp av System.Samlinger.Generisk ;

klasse Kontoinformasjon
{
offentlig statisk tomrom Hoved ( )
{
// Opprett liste av type - Konto.
Liste detaljer = ny Liste ( ) ;
// Legg til 2 poster til listen.
detaljer . Legg til ( ny Regnskap { Acc_ID = 1 , Acc_Name = 'Linux' , Industri = 'Utdanning' ,Inntekter = 2500 } ) ;
detaljer . Legg til ( ny Regnskap { Acc_ID = 1 , Acc_Name = 'Python' , Industri = 'Førstegangs tjeneste' ,Inntekter = 10 000 } ) ;

// Prøv å lage en ordbok fra listen ovenfor med nøkkel som Acc_ID.
Ordbok kontoer_dikt = detaljer . TilDictionary ( j => j . Acc_ID ) ;

}
}

// Opprett klasse med navn - Konto med fire attributter
offentlig klasse Regnskap
{
offentlig int Acc_ID { ; sett ; }
offentlig streng Acc_Name { ; sett ; }
offentlig streng Industri { ; sett ; }
offentlig int Inntekter { ; sett ; }
}

Unntak:

Et ubehandlet unntak som er System.ArgumentException er hevet siden nøkkelen er duplikat (1) i begge Acc_ID-ene.

Eksempel 4: Nullkilde – ArgumentNullException

Lag en liste med 'Konto'-typen og tilordne null til den. Prøv å lage en ordbok fra forrige liste med nøkkelen som Acc_ID.

ved hjelp av System ;
ved hjelp av System.Linq ;
ved hjelp av System.Samlinger.Generisk ;

klasse Kontoinformasjon
{
offentlig statisk tomrom Hoved ( )
{
// Opprett liste av type - Konto og tilordne null til den.
Liste detaljer = null ;

// Prøv å lage en ordbok fra listen ovenfor med nøkkel som Acc_ID.
Ordbok kontoer_dikt = detaljer . TilDictionary ( j => j . Acc_ID ) ;

}
}

// Opprett klasse med navn - Konto med fire attributter
offentlig klasse Regnskap
{
offentlig int Acc_ID { ; sett ; }
offentlig streng Acc_Name { ; sett ; }
offentlig streng Industri { ; sett ; }
offentlig int Inntekter { ; sett ; }
}

Unntak:

Et ubehandlet unntak som er System.ArgumentNullException er hevet siden listen er null.

Konklusjon

Vi lærte hvordan du lager en ordbok fra IEnumerable (her er det en liste) ved å bruke ToDictionary()-metoden i C# LINQ. Denne metoden kan overbelastes på to måter. Vi diskuterte begge metodene med eksempler. Vi lærte også de to unntakstilfellene som oppstår med denne metoden når datakilden/keySelector/elementSelector er null og nøklene er dupliserte.