C# 如果IEnumerable<;字符串>;只返回一个字符串
我正在对XML文件执行一个简单的Linq查询C# 如果IEnumerable<;字符串>;只返回一个字符串,c#,xml,visual-studio-2010,linq,ienumerable,C#,Xml,Visual Studio 2010,Linq,Ienumerable,我正在对XML文件执行一个简单的Linq查询 IEnumerable<string> value = from item in myFile.Descendants("ProductName") select (string)item; 但是如果我确定我只有一个项目,并且我的方法签名是: public string getValue() { return ?; } 我应该返回什么(如果我想删除foreach循环)?如
IEnumerable<string> value = from item in myFile.Descendants("ProductName")
select (string)item;
但是如果我确定我只有一个项目,并且我的方法签名是:
public string getValue()
{
return ?;
}
我应该返回什么(如果我想删除foreach循环)?如果你只想返回一个项目,那么使用:
公共字符串getValue()
{
IEnumerable value=来自myFile.subjects(“ProductName”)中的项
选择(字符串)项;
返回值.FirstOrDefault();
}
如果确定始终只有一个字符串,则可以返回value.Single()
还有一些选择:
Single
或SingleOrDefault
),或根本没有元素(使用First
或Single
),是否要引发异常
如果总是只排除一个元素,我会坚持,因为如果元素为零或多个,它将抛出异常。有/和/方法可以将元素的可枚举性分解为一个
Single
方法只需要一个元素,如果结果包含零个或多个元素,则将异常。使用SingleOrDefault
处理零和一
“First”对可以处理多个元素,但是如果没有元素,则再次抛出First
所有这些方法都带有一个重载,允许您指定条件,无需使用.Where
调用
就你而言:
string value = (from item in myFile.Descendants("ProductName")
select (string)item)
.SingleOrDefault();
在选择单个或第一个元素时,如果需要一个元素,请使用Single
;如果需要零个或一个元素,请使用SingleOrDefault
;如果不关心返回多少元素,请使用FirstOrDefault
(以及某种OrderBy
)
另外请注意,这些方法使用延迟执行,因此一旦满足
First
的要求,它将停止迭代。如果您确定只有一个并且必须只有一个,则应使用Single
。
如果您有多个异常,这实际上会引发异常。谢谢@BigYellowCactus的回复,但我选择Adam Houldsworth,因为他给出了一个代码示例,并对这种情况给出了最好的解释。
public string getValue()
{
IEnumerable<string> value = from item in myFile.Descendants("ProductName")
select (string)item;
return value.FirstOrDefault();
}
string value = (from item in myFile.Descendants("ProductName")
select (string)item)
.SingleOrDefault();