C# 从集合中访问数据

C# 从集合中访问数据,c#,C#,我有一个从自定义函数返回的数据集合,我可以枚举它,但是我不能只得到一个项目(我不理解语法): 如果我可以枚举一些东西,有没有一种标准的方法可以访问单个实例中的数据?我会尝试使用Linq for循环工作的可能原因是您的currentDoc是一个IEnumerable,它支持枚举但不支持索引访问 如果要访问第一个元素以外的其他元素,可以将currentDoc转换为数组currentDoc.ToArray()或列表currentDoc.ToList() 如果currentDoc中正好有1个项目,这将起

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

如果我可以枚举一些东西,有没有一种标准的方法可以访问单个实例中的数据?

我会尝试使用Linq

for循环工作的可能原因是您的
currentDoc
是一个
IEnumerable
,它支持枚举但不支持索引访问

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

如果currentDoc中正好有1个项目,这将起作用。如果有0个或2个以上的项目,它将引发异常

如果有0或1项,则可以使用currentDoc.SingleOrDefault()代替,如果currentDoc为空,则返回null


如果您有多个项目,则可以使用currentDoc.First()或currentDoc.FirstOrDefault(),但在这种情况下,您可能需要考虑为什么您的集合中有多个项目,以及使用哪一个是“正确的”项目。

我觉得重要的是指出,如果在您的收藏中找不到某个项目,
Single
First
将引发异常。我倾向于
SingleOrDefault
FirstOrDefault
。第二项,我认为是被误解了,你想编辑你收藏中的一项。除非您认为需要在编辑之前获取初始项

您可以通过以下几种方法执行此操作:

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
,如果该值不存在,它将抛出异常。

这取决于
currentDoc
的类型。如果它是一个
IEnumerable
则不能,如果它是其他的则可能。currentDoc的类型是什么?
IList
是定义索引器的接口。可能正如其他人指出的那样,
currentDoc
是一个IEnumerable。您可以尝试在
currentDoc
上调用
ToList()
,然后尝试这样做。此外,如果您只关心获取
[0]
,那么
currentDoc.First()[“menuitemtesterimage”]。ToString()
可以工作。如果currentDoc是一个列表或数组,则可以使用currentDoc[0]对其进行索引否则,如果currentDoc.First()至少实现了IEnumerable,则可以使用它获取单个项
string itemSingle = currentDoc.Single()["MenuItemTeaserImage"].ToString();
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;