J'ai utilisé le mot clé "select" et la méthode d'extension pour renvoyer un IEnumerable<T>
Avec LINQ, mais j'ai besoin de renvoyer un Dictionary<T1, T2>
Générique et je n'arrive pas à le comprendre. L'exemple que j'ai appris en utilisant quelque chose sous une forme semblable à celle-ci:
IEnumerable<T> coll = from x in y
select new SomeClass{ prop1 = value1, prop2 = value2 };
J'ai également fait la même chose avec les méthodes d'extension. J'ai supposé que puisque les éléments dans un Dictionary<T1, T2>
Peuvent être itérés comme KeyValuePair<T1, T2>
, Je pourrais simplement remplacer "SomeClass" dans l'exemple ci-dessus par "new KeyValuePair<T1, T2> { ...
", Mais cela n'a pas été utile. t work (Key et Value ont été marqués en lecture seule, je n’ai donc pas pu compiler ce code).
Est-ce possible ou dois-je le faire en plusieurs étapes?
Merci.
Les méthodes d'extensions fournissent également une extension ToDictionary . Il est relativement simple à utiliser. L’usage général consiste à passer un sélecteur lambda pour la clé et à obtenir l’objet en tant que valeur, mais vous pouvez utiliser un sélecteur lambda pour la clé et la valeur.
class SomeObject
{
public int ID { get; set; }
public string Name { get; set; }
}
SomeObject[] objects = new SomeObject[]
{
new SomeObject { ID = 1, Name = "Hello" },
new SomeObject { ID = 2, Name = "World" }
};
Dictionary<int, string> objectDictionary = objects.ToDictionary(o => o.ID, o => o.Name);
Ensuite objectDictionary[1]
Contiendrait la valeur "Bonjour"
var dictionary = (from x in y
select new SomeClass
{
prop1 = value1,
prop2 = value2
}
).ToDictionary(item => item.prop1);
Cela suppose que SomeClass.prop1
est le Key
souhaité pour le dictionnaire.
Une collection de KeyValuePair
est encore plus explicite et s’exécute très bien.
Dictionary<int, string> dictionary = objects
.Select(x=> new KeyValuePair<int, string>(x.Id, x.Name))
.ToDictionary(x=>x.Key, x=>x.Value);