访问ICollection中的值

时间:2017-08-25 08:06:01

标签: .net collections bots icollection

string greeting = "";    
foreach (System.Collections.Generic.ICollection<object> x in greetingRecommendation.Resolution.Values)
    {
           foreach (var y in x)
           {
               greeting = (string)y;
           }
    }

我需要找回&#34;早安&#34;里面的价值&#34; greetingRecommendation.Resolution.Values&#34;我这样做(使用foreach)和它的工作。但是有更好的方法来访问该单一值。 enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用LINQ以更简单的方式查询集合。

让我们以下面的集合为例:

var objCollection = (ICollection<object>) new List<object>
{
    "Good Morning",
    "Good Afternoon",
    "Good Night"
};

现在我们可以使用以下内容提取特定索引处的第一个,最后一个或项目:

var firstItem = objCollection.First(); // returns "Good Morning"
var lastItem = objCollection.Last(); // returns "Good Night"
var itemAtIndex1 = objCollection.ElementAt(1); // returns "Good Afternoon"

以前的所有版本都有OrDefault个版本。不同之处在于First如果objCollection没有商品会引发异常,但FirstOrDefault只会返回default(object)(顺便说一下是nullobjCollection没有任何内容。

举一个例子,这就是OrDefault变体的使用方式:

var firstItem = objCollection.FirstOrDefault(); // returns "Good Morning"
var lastItem = objCollection.LastOrDefault(); // returns "Good Night"
var itemAtIndex99 = objCollection.ElementAtOrDefault(99); // returns null, because `objCollection` has only three items and the index 99 doesn't exist on it

greetingRecommendation.Resolution.Values的场景中,可以使用以下内容来检索集合的第一项:

var greeting = greetingRecommendation.Resolution.Values.FirstOrDefault() as string;

我们假设Values属性属于ICollection<object>类型。

该行将确保:

  • 如果Values属性没有项目,则不会抛出任何异常,并且会返回default(object)
  • Values属性中的第一项将安全地投放到string,以避免在包含无法投放到string的值时出现问题。如果无法投放该值,则会返回default(string)null)。
  • 变量greeting将包含nullstring,其中Values属性的第一个值。

不要忘记在using指令中添加using System.Linq;以便能够使用LINQ。

我已经在以下链接中准备了一个.NET Fiddle,以便看到这样的LINQ操作: