访问ICollection中的值
问题描述:
string greeting = "";
foreach (System.Collections.Generic.ICollection<object> x in greetingRecommendation.Resolution.Values)
{
foreach (var y in x)
{
greeting = (string)y;
}
}
我需要检索“greetingRecommendation.Resolution.Values”内部的“Good Morning”值。我按照上面的方法(使用foreach)和它的工作方式执行了此操作。但是,有没有更好的方法来获取这个单一的价值。 访问ICollection中的值
答
您可以使用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)
(这是null
顺便说一句)如果objCollection
没有项目。
对于把一个例子,这是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
将包含null
或string
,其中第一个值为Values
属性的第一个值。
不要忘记在使用指令中添加一个using System.Linq;
以便能够使用LINQ。
我已经准备了.NET小提琴在下面的链接,在行动中看到这样的LINQ操作:
你有没有尝试之前发布的搜索回答你的问题?你的问题是微不足道的。 –
我做了一些谷歌,我发现ICollection有ElementAt方法。如果你知道你想访问的值的索引,那么你可以调用ElementAt方法,并且这个假设可以更快地返回值,然后使用foreach循环。请注意,这是一种扩展方法。 –
我试过使用ElementAt。但没有办法可用 –