C# Linq Select投影不能应用于单个记录

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

我尝试从字符串数组返回年份,如果它包含任何匹配的年份

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