[C#] Comment extraire le premier objet de List <Object> en utilisant Linq


Answers

[0] ou .First() vous donnera la même performance quoi qu'il arrive.
Mais votre Dictionary peut contenir IEnumerable<Component> au lieu de List<Component> , et vous ne pouvez pas utiliser l'opérateur [] . C'est là que la différence est énorme.

Donc, pour votre exemple, cela n'a pas vraiment d'importance, mais pour ce code, vous n'avez pas le choix d'utiliser First ():

var dic = new Dictionary<String, IEnumerable<Component>>();
foreach (var components in dic.Values)
{
    // you can't use [0] because components is an IEnumerable<Component>
    var firstComponent = components.First(); // be aware that it will throw an exception if components is empty.
    var depCountry = firstComponent.ComponentValue("Dep");
}
Question

J'ai sous le code dans c # 4.0.

//Dictionary object with Key as string and Value as List of Component type object
Dictionary<String, List<Component>> dic = new Dictionary<String, List<Component>>();

//Here I am trying to do the loping for List<Component>
foreach (List<Component> lstComp in dic.Values.ToList())
{
    // Below I am trying to get first component from the lstComp object.
    // Can we achieve same thing using LINQ?
    // Which one will give more performance as well as good object handling?
    Component depCountry = lstComp[0].ComponentValue("Dep");
}



Je voudrais le faire comme ceci:

//Dictionary object with Key as string and Value as List of Component type object
Dictionary<String, List<Component>> dic = new Dictionary<String, List<Component>>();

//from each element of the dictionary select first component if any
IEnumerable<Component> components = dic.Where(kvp => kvp.Value.Any()).Select(kvp => (kvp.Value.First() as Component).ComponentValue("Dep"));

mais seulement s'il est certain que cette liste ne contient que des objets de la classe Component ou des enfants




Je le fais.

List<Object> list = new List<Object>();

if(list.Count>0){
  Object obj = list[0];
}



Il y a un tas de ces méthodes:
.First .FirstOrDefault .Single .SingleOrDefault
Choisissez celui qui vous convient le mieux.




pour l'expression linq, vous pouvez utiliser comme ceci:

 List<int> list = new List<int>() {1,2,3 };
        var result = (from l in list
                     select l).FirstOrDefault();

pour l'expression lambda, vous pouvez utiliser comme ça

Liste list = new List () {1, 2, 3}; int x = list.FirstOrDefault ();