从集合中访问数据

时间:2016-02-02 21:43:17

标签: c#

我有一个自定义函数返回的数据集合,我可以枚举,但我不能只获得一个项目(我不理解语法):

foreach (var document in currentDoc)
{
    // This works
    item = document["MenuItemTeaserImage"].ToString();
}

//Doesn't work
string itemSingle = currentDoc[0]["MenuItemTeaserImage"].ToString()

如果我可以通过某种方式进行枚举,那么我可以在一个实例中访问数据吗?

3 个答案:

答案 0 :(得分:0)

我会使用Enumerable.First

尝试使用Linq
var itemSingle = currentDoc.First()["MenuItemTeaserImage"].ToString();

for循环的可能原因是currentDocIEnumerable,它支持枚举但不支持索引访问。

如果您想访问除第一个元素之外的其他元素,可以将currentDoc转换为数组currentDoc.ToArray()或列表currentDoc.ToList()

答案 1 :(得分:0)

string itemSingle = currentDoc.Single()["MenuItemTeaserImage"].ToString();

如果currentDoc中只有1个项目,这将有效,如果有0或2个项目,它将抛出异常。

如果您有0或1个项目,那么您可以使用currentDoc.SingleOrDefault()代替,如果currentDoc为空,您将返回null。

如果您有多个项目,那么您可以使用currentDoc.First()或currentDoc.FirstOrDefault(),但在这种情况下,您可能想要考虑为什么您的集合中有多个项目,哪一个是'纠正'一个人使用。

答案 2 :(得分:0)

我认为,如果在您的收藏中找不到某个项目,则SingleFirst会抛出异常,这一点很重要。我倾向于SingleOrDefaultFirstOrDefault。第二项,我认为是误解,你想编辑你的集合中的单个项目。除非您认为在编辑之前需要抓取初始项目。

您可以采用以下几种方法:

var example = collection.ElementAt(0);
if(example != null)
     collection[example].Property = value;


collection.FirstOrDefault().Property = value;
collection.SingleOrDefault().Property = value;

如果您只是喜欢该集合中的第一项:

var example = collection.ElementAt(0) as string;
var example = collection.FirstOrDefault() as string;
var example = collection.SingleOrDefault() as string;

这些是几种方法,请注意ToString,如果值不存在则会引发异常。