与 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(或 0new 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 替换它,但它离不同意大括号风格等不远了