与 Linq xxxOrDefault 的结果进行比较时,是否使用 default(string) 是一种常见的习惯用法?
Is using default(string) a common idiom when comparing against the result of Linq xxxOrDefault?
我正在审查一些代码:
private static bool TryGetValidatedHost(string unvalidatedHost, out string validatedHost)
{
validatedHost = _whiteListedHostNames.FirstOrDefault(
hostname =>
hostname.Equals(
unvalidatedHost,
StringComparison.InvariantCultureIgnoreCase));
return (validatedHost != default(string));
}
起初我觉得将 validatedHost 与字符串的默认值进行比较很奇怪,我原以为这是与 null 的比较。
return (validatedHost != null);
然后我想,这实际上是 "more correct" - returns FirstOrDefault 上面的 Linq 语句,所以它应该与默认值进行比较,恰好字符串的默认值是空。
这有标准模式吗?是应该有一个明确的偏好,还是只是风格,留给作者?
也许只有我一个人,但当我查看您的代码时,我的第一个想法是您正在将结果与空字符串进行比较。不过,不要问我为什么(这可能与字符串并不总是表现得像 "regular" 引用类型这一事实有关)。不确定其他人对此会有何反应,但对我来说,如果您在此处使用 null
比较,您想要完成的事情会更加明显。
我想说它与 null
(或 0
或 new SomeValueType()
相比其他类型)相对不寻常,并不是因为 default
如此罕见因为 null
太常见了。因此,出于这个原因,我赞成 null
。
我不认为 default(string)
如此不寻常以至于 怪异 。 FirstOrDefault
当然是 returns default(TSource)
因为它可以与可空类型和不可空类型一起使用,所以调用它的编码器认为 "if there's no match it will return default(string)
" 并与之比较是合理的,而不是 "if there's no match it will return default(string)
which is null
because string
is a nullable type" 并与 null
.
进行比较
因此,我认为这是一个合理的文体选择。如果项目的风格指南由我决定并且我正在审查代码,我仍然不同意这种风格选择并用 null
替换它,但它离不同意大括号风格等不远了
我正在审查一些代码:
private static bool TryGetValidatedHost(string unvalidatedHost, out string validatedHost)
{
validatedHost = _whiteListedHostNames.FirstOrDefault(
hostname =>
hostname.Equals(
unvalidatedHost,
StringComparison.InvariantCultureIgnoreCase));
return (validatedHost != default(string));
}
起初我觉得将 validatedHost 与字符串的默认值进行比较很奇怪,我原以为这是与 null 的比较。
return (validatedHost != null);
然后我想,这实际上是 "more correct" - returns FirstOrDefault 上面的 Linq 语句,所以它应该与默认值进行比较,恰好字符串的默认值是空。
这有标准模式吗?是应该有一个明确的偏好,还是只是风格,留给作者?
也许只有我一个人,但当我查看您的代码时,我的第一个想法是您正在将结果与空字符串进行比较。不过,不要问我为什么(这可能与字符串并不总是表现得像 "regular" 引用类型这一事实有关)。不确定其他人对此会有何反应,但对我来说,如果您在此处使用 null
比较,您想要完成的事情会更加明显。
我想说它与 null
(或 0
或 new SomeValueType()
相比其他类型)相对不寻常,并不是因为 default
如此罕见因为 null
太常见了。因此,出于这个原因,我赞成 null
。
我不认为 default(string)
如此不寻常以至于 怪异 。 FirstOrDefault
当然是 returns default(TSource)
因为它可以与可空类型和不可空类型一起使用,所以调用它的编码器认为 "if there's no match it will return default(string)
" 并与之比较是合理的,而不是 "if there's no match it will return default(string)
which is null
because string
is a nullable type" 并与 null
.
因此,我认为这是一个合理的文体选择。如果项目的风格指南由我决定并且我正在审查代码,我仍然不同意这种风格选择并用 null
替换它,但它离不同意大括号风格等不远了