C# Linq Select投影不能应用于单个记录
我尝试从字符串数组返回年份,如果它包含任何匹配的年份 GetYear()扩展方法如下所示:C# Linq Select投影不能应用于单个记录,c#,linq,C#,Linq,我尝试从字符串数组返回年份,如果它包含任何匹配的年份 GetYear()扩展方法如下所示: public static int GetYear(this string me) { for (int i = 1971; i <= DateTime.Now.Year; i++) { if (me.Equals(i.ToString())) { return i; } } return -1; } 但事实并非如此 string[] split
public static int GetYear(this string me)
{
for (int i = 1971; i <= DateTime.Now.Year; i++)
{
if (me.Equals(i.ToString()))
{
return i;
}
}
return -1;
}
但事实并非如此
string[] splitString = me.Split(' ');
var year = splitString.FirstOrDefault(x => x.GetYear() > 0).Select(x => x.GetYear());
我想知道为什么它不工作,因为Select()应该是一个投影,对吗
提前感谢。
FirstOrDefault
从IEnumerable
当在第二种情况下使用它时,它是一个字符串[]
,它返回一个字符串
在
字符串上使用Select
可以投影字符串的每个字符,并且char
类型的扩展方法不存在,第二个查询会给出设计时错误,因为x不包含方法GetYear(),只需将它们翻转过来即可。splitString.select(x=>x.GetYear()).FirstOrDefault(x=>x>0)@Steve,这就是我在问题中所做的。只是想知道为什么它不能反过来工作看看Bradly Moorfield的答案,FirstOrDefault返回一个条目,LINQ扩展方法只在继承IEnumable接口的对象上工作。在您的例子中,INT不实现此接口,而Select()返回IEnumerable
string[] splitString = me.Split(' ');
var year = splitString.FirstOrDefault(x => x.GetYear() > 0).Select(x => x.GetYear());