具有null的FirstOrDefault比较
本文关键字:比较 FirstOrDefault null 具有 | 更新日期: 2023-09-27 18:19:37
你能解释一下,当第一个表达式已经返回true或false时,它是如何返回true或false的吗?我的意思是为什么它还需要与比较=空
public static bool IsLanguageAvaliable(string lang)
{
return AvaliableLanguages.FirstOrDefault(languages => languages.LangCultureName.Equals(lang)) != null;
}
FirstOrDefault
将返回类型的默认值。换句话说,如果没有languages.LangCultureName
等于lang
的值,那么您将从FirstOrDefault
返回一个null
。
虽然表达式languages.LangCultureName.Equals(lang)
确实返回true或false,但该值用于从集合中选择对象,而不是方法的返回值。
如果您要做的只是确定lang
是否存在,那么您应该使用.Any
而不是.FirstOrDefault
。
当第一个表达式已经返回true或false时,它如何返回true或false?
第一个表达式没有返回true或false,您的断言不正确。
FirstOrDefault()
返回序列的第一个元素,如果序列不包含元素,则返回默认值。
到
我的意思是为什么它还需要与比较=空
由于您的第一个假设是不正确的,并且根据文档,它返回默认值,并且从对象派生的类的默认值是null
。在null上检查相等意味着序列中不存在对象。
您最好使用"Any",如果列表中的任何元素符合您的条件,它将返回true。
public static bool IsLanguageAvaliable(string lang)
{
return AvaliableLanguages.Any(languages => languages.LangCultureName.Equals(lang));
}
如果您查看FirstOrDefualt
方法的签名,它是IEnumerable<T>
:上的扩展方法
FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>)
正如您所看到的,第二个参数的类型是Func,它接受类型为T的对象并返回boolean
。使用这个Func参数,可以定义应该选择哪些元素。因此,FirstOrDefault
方法迭代您的列表,并使用Func方法来评估哪个对象符合条件。因此,如果FirstOrDefault
在IEnumerable<T>
列表中找到元素,它将返回一个类型为T的对象,否则结果将是null