Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果IEnumerable<;字符串>;只返回一个字符串_C#_Xml_Visual Studio 2010_Linq_Ienumerable - Fatal编程技术网

C# 如果IEnumerable<;字符串>;只返回一个字符串

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循环)?如

我正在对XML文件执行一个简单的Linq查询

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();