我有以下代码,如果它存在于数组“arrayID”中,它将返回一个值。
string str = arrayID.Single(s => s == ((System.Data.DataRowView)(e.Item.DataItem)).Row["ID"].ToString());
我现在面临的问题是,当值不存在时,我会收到错误
序列不包含匹配元素
我希望返回一个空字符串,因为arrayID中不存在该值。
请告诉我如何在linq中完成。
提前致谢。
答案 0 :(得分:6)
SingleOrDefault
方法就是你所追求的。如果没有项目,它将返回默认值(null),因此您只需要另一个步骤将其转换为空:
string str = arrayID
.SingleOrDefault(s => s == ((System.Data.DataRowView)(e.Item.DataItem)).Row["ID"].ToString())
?? string.Empty
答案 1 :(得分:4)
SingleOrDefault 中的默认值是指C#默认关键字。因此,当找不到任何内容时,将返回源值的默认值。
http://msdn.microsoft.com/en-us/library/xwth0h0d.aspx
所以请注意,值类型的默认值不会为null 。
例如:
int[] list = { 1, 3, 7, 13,21};
int v;
try {
v=list.Single(n => n > 15);
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
}
int? v2;
v2 = list.SingleOrDefault(n => n > 30);
Console.WriteLine(v2.ToString());
// output: 0
int v3;
v3=list.SingleOrDefault(n => n > 30);
Console.WriteLine(v3.ToString());
// output: 0
string[] slist = {"a", "b", "c"};
var v4 = slist.SingleOrDefault(s => s == "z");
Console.WriteLine(v4==null);
// output: true <-- i.e. it is a reference type + it is nullable.