Szintaxis:
1. Ha az adott adatforrásból a megadott kulcsválasztó és elemválasztó függvények szerint szeretne szótárt készíteni, akkor a következő módszerrel terhelje túl:
Paraméterek:
-
- forrás : Forrás lehet egy IEnumerable (lista), amelyben a szótár ebből a forrásból jön létre.
- kulcsválasztó : Ez egy olyan függvény, amely az egyes elemek kulcsának lekérésére szolgál.
- elemválasztó: Ez egy függvény, amely az elem lekérésére szolgál.
- TSource : Ez az adatforrás típusát meghatározó típusparaméter.
- TKulcs: Ez a típus paraméter, amely megadja a kulcs típusát.
- TEelem : Ez az elem típusát meghatározó típusparaméter.
2. Ha az adott adatforrásból a megadott kulcsválasztó funkció szerint szeretne szótárt készíteni, akkor a következő módszerrel terhelje túl:
Paraméterek:
-
- forrás : Forrás lehet egy IEnumerable (lista), amelyben a szótár ebből a forrásból jön létre.
- kulcsválasztó : Ez egy olyan függvény, amely az egyes elemek kulcsának lekérésére szolgál.
- Forrás: Ez az adatforrás típusára vonatkozik.
- TKey : Megadja a kulcs típusát.
1. példa: Meghatározott kulcsválasztó és elemválasztó funkció
Hozzon létre egy „Számla” típusú listát, amely négy attribútumot (Acc_ID, Acc_Name, Industry, Revenue) tartalmaz öt rekorddal.
1. Hozzon létre egy szótárt az előző listából úgy, hogy a kulccsal Acc_ID és az Értékkel a Acc_Name értékkel.
2. Hozzon létre egy szótárt az előző listából úgy, hogy a kulccsal Acc_Name és az Érték a bevétel.
segítségével System.Linq ;
segítségével System.Collections.Generic ;
osztály Számla információ
{
nyilvános statikus üres Fő ( )
{
// Típuslista létrehozása - Fiók.
Lista részletek = új Lista ( ) ;
// 5 rekord hozzáadása a listához.
részletek . Hozzáadás ( új fiók { Acc_ID = 1 , Acc_Name = 'Linux' , Ipar = 'Oktatás' ,Bevétel = 2500 } ) ;
részletek . Hozzáadás ( új fiók { Acc_ID = 2 , Acc_Name = 'Piton' , Ipar = 'Kiképzőtábor' ,Bevétel = 10000 } ) ;
részletek . Hozzáadás ( új fiók { Acc_ID = 3 , Acc_Name = 'Jáva' , Ipar = 'Oktatás' ,Bevétel = 500 } ) ;
részletek . Hozzáadás ( új fiók { Acc_ID = 4 , Acc_Name = '.HÁLÓ' , Ipar = 'Kiképzés' ,Bevétel = 2080 } ) ;
részletek . Hozzáadás ( új fiók { Acc_ID = 5 , Acc_Name = 'Jóslat' , Ipar = 'Munka' ,Bevétel = 2090 } ) ;
// Hozzon létre egy szótárt a fenti listából úgy, hogy a kulcs a Acc_ID, az érték pedig a Acc_Name
Konzol . WriteLine ( ' ----A kulcs mint Acc_ID és az érték mint Acc_Name----' ) ;
Szótár accounts_dict1 = részletek . ToDictionary ( j => j . Acc_ID , j => j . Acc_Name ) ;
az egyes ( KeyValuePair i ban ben accounts_dict1 )
{
Konzol . WriteLine ( 'Felhasználónév :' + én . Kulcs + ' Felhasználónév :' + én . Érték ) ;
}
// Hozzon létre egy szótárt a fenti listából úgy, hogy a kulcs a Acc_Name és az érték a bevétel
Konzol . WriteLine ( ' ----Kulcs mint Acc_Name és Érték mint bevétel ----' ) ;
Szótár accounts_dict2 = részletek . ToDictionary ( l => l . Acc_Name , l => l . Bevétel ) ;
az egyes ( KeyValuePair k ban ben accounts_dict2 )
{
Konzol . WriteLine ( 'Felhasználónév :' + k . Kulcs + 'Számla bevétel:' + k . Érték ) ;
}
}
}
// Név osztály létrehozása - Fiók négy attribútummal
nyilvános osztály fiók
{
nyilvános int Acc_ID { kap ; készlet ; }
nyilvános húr Acc_Name { kap ; készlet ; }
nyilvános húr Ipar { kap ; készlet ; }
nyilvános int Bevétel { kap ; készlet ; }
}
Kimenet:
Magyarázat:
1. Hozzon létre egy „Fiók” nevű osztályt négy attribútummal.
2. A fő osztályban hozzon létre „Számla” típusú listát, és illesszen be öt rekordot.
3. Hozzon létre egy szótárt az előző listából úgy, hogy a kulcs a Acc_ID, az érték pedig a Acc_Name. Itt a TKey-t int-ként, a TElement-et pedig karakterláncként adjuk meg. A ToDictionary() metóduson belül átadjuk az Acc_ID-t a keySelector-ban és az Acc_Name-et az elementSelector-ban. Végül a „foreach” ciklust használjuk a szótár iterálására, és a kulcsok és értékek visszaadására a kulcs és érték tulajdonságaival.
4. Hozzon létre egy szótárt az előző listából úgy, hogy a kulccsal Acc_Name, az értékkel pedig a Bevétel. Itt a TKey-t karakterláncként, a TElement-et pedig int-ként adjuk meg. A ToDictionary() metóduson belül átadjuk az Acc_Name-t a keySelector-ban és a Revenue-t az elementSelector-ban. Végül a „foreach” ciklust használjuk a szótár iterálására, és a kulcsok és értékek visszaadására a kulcs és érték tulajdonságaival.
2. példa: Megadott kulcsválasztó
Használja az előző kódot, és hozzon létre egy szótárt az előző listából az Acc_ID kulccsal.
segítségével Rendszer ;segítségével System.Linq ;
segítségével System.Collections.Generic ;
osztály Számla információ
{
nyilvános statikus üres Fő ( )
{
// Típuslista létrehozása - Fiók.
Lista részletek = új Lista ( ) ;
// 5 rekord hozzáadása a listához.
részletek . Hozzáadás ( új fiók { Acc_ID = 1 , Acc_Name = 'Linux' , Ipar = 'Oktatás' ,Bevétel = 2500 } ) ;
részletek . Hozzáadás ( új fiók { Acc_ID = 2 , Acc_Name = 'Piton' , Ipar = 'Kiképzőtábor' ,Bevétel = 10000 } ) ;
részletek . Hozzáadás ( új fiók { Acc_ID = 3 , Acc_Name = 'Jáva' , Ipar = 'Oktatás' ,Bevétel = 500 } ) ;
részletek . Hozzáadás ( új fiók { Acc_ID = 4 , Acc_Name = '.HÁLÓ' , Ipar = 'Kiképzés' ,Bevétel = 2080 } ) ;
részletek . Hozzáadás ( új fiók { Acc_ID = 5 , Acc_Name = 'Jóslat' , Ipar = 'Munka' ,Bevétel = 2090 } ) ;
// Hozzon létre egy szótárt a fenti listából Acc_ID-vel.
Szótár accounts_dict = részletek . ToDictionary ( j => j . Acc_ID ) ;
az egyes ( KeyValuePair i ban ben accounts_dict )
{
Konzol . WriteLine ( 'Kulcs:' + én . Kulcs + '--> Account-Name :' + én . Érték . Acc_Name
+ 'Fiók-iparág:' + én . Érték . Ipar
+ 'Számla bevétel:' + én . Érték . Bevétel ) ;
}
}
}
// Név osztály létrehozása - Fiók négy attribútummal
nyilvános osztály fiók
{
nyilvános int Acc_ID { kap ; készlet ; }
nyilvános húr Acc_Name { kap ; készlet ; }
nyilvános húr Ipar { kap ; készlet ; }
nyilvános int Bevétel { kap ; készlet ; }
}
Kimenet:
Magyarázat:
Itt létrehozunk egy szótárt, amelynek kulcsa Acc_ID. Ez a szótár minden rekordjának kulcsaként működik, amelyet a listából hoztunk létre. Ezt követően a „foreach” ciklus segítségével megkapjuk a kulcsokat és az értékeket (attribútumokkal együtt) a kulcs és érték tulajdonságok segítségével.
3. példa: Duplicate Keys – ArgumentException
Hozzon létre egy listát két rekordból, és próbálja meg szótárrá alakítani az Acc_ID kulcsával.
segítségével Rendszer ;segítségével System.Linq ;
segítségével System.Collections.Generic ;
osztály Számla információ
{
nyilvános statikus üres Fő ( )
{
// Típuslista létrehozása - Fiók.
Lista részletek = új Lista ( ) ;
// 2 rekord hozzáadása a listához.
részletek . Hozzáadás ( új fiók { Acc_ID = 1 , Acc_Name = 'Linux' , Ipar = 'Oktatás' ,Bevétel = 2500 } ) ;
részletek . Hozzáadás ( új fiók { Acc_ID = 1 , Acc_Name = 'Piton' , Ipar = 'Kiképzőtábor' ,Bevétel = 10000 } ) ;
// Próbáljon meg létrehozni egy szótárt a fenti listából úgy, hogy a kulcs Acc_ID legyen.
Szótár accounts_dict = részletek . ToDictionary ( j => j . Acc_ID ) ;
}
}
// Név osztály létrehozása - Fiók négy attribútummal
nyilvános osztály fiók
{
nyilvános int Acc_ID { kap ; készlet ; }
nyilvános húr Acc_Name { kap ; készlet ; }
nyilvános húr Ipar { kap ; készlet ; }
nyilvános int Bevétel { kap ; készlet ; }
}
Kivétel:
Felmerül egy kezeletlen kivétel, a System.ArgumentException, mivel a kulcs ismétlődő (1) mindkét Acc_ID-ben.
4. példa: Null Source – ArgumentNullException
Hozzon létre egy listát „Számla” típussal, és rendeljen hozzá nullát. Próbáljon meg létrehozni egy szótárt az előző listából az Acc_ID kulccsal.
segítségével Rendszer ;segítségével System.Linq ;
segítségével System.Collections.Generic ;
osztály Számla információ
{
nyilvános statikus üres Fő ( )
{
// Hozzon létre egy típusú listát - Fiók és rendeljen hozzá nullát.
Lista részletek = nulla ;
// Próbáljon meg létrehozni egy szótárt a fenti listából úgy, hogy a kulcs Acc_ID legyen.
Szótár accounts_dict = részletek . ToDictionary ( j => j . Acc_ID ) ;
}
}
// Név osztály létrehozása - Fiók négy attribútummal
nyilvános osztály fiók
{
nyilvános int Acc_ID { kap ; készlet ; }
nyilvános húr Acc_Name { kap ; készlet ; }
nyilvános húr Ipar { kap ; készlet ; }
nyilvános int Bevétel { kap ; készlet ; }
}
Kivétel:
A rendszer egy kezeletlen kivétel, a System.ArgumentNullException, mivel a lista nulla.
Következtetés
Megtanultuk, hogyan készítsünk szótárt az IEnumerable-ból (itt ez a lista) a ToDictionary() metódussal a C# LINQ-ban. Ezt a módszert kétféleképpen lehet túlterhelni. Mindkét módszert példákkal tárgyaltuk. Megtanultuk azt a két kivételes esetet is, amelyeket ez a módszer vet fel, amikor az adatforrás/keySelector/elementSelector nulla, és a kulcsok duplikálódnak.