c# - 我可以安全地忽略 CodeAnalysis 警告 : replace string == "" with string. IsNullOrEmpty 吗?

标签 c# code-analysis isnullorempty

我有类似这样的代码:

string s = CreateString();
if (s == "") foo(s);

如果 s 等于 "",则应调用 foo。如果字符串为 null,这种情况永远不会发生,那么 NullReferenceException 就可以了(因为这毕竟是一种异常情况)。

CodeAnalysis 告诉我要测试 s.IsNullOrEmpty。这会以一种意想不到的方式改变功能。

性能不是问题。

抑制相关的 CA1820 警告是否安全?

编辑:更新了代码示例和文本以更好地反射(reflect)我的情况。

编辑:这是(略有改动的)实际代码(在标准 IXmlSerializable 实现中):

public void ReadXml (XmlReader reader)
    // ...
    string img = reader.ReadElementString ("Image");
    if (img != "") {
        Image = Image.FromFile(img);
    }
    // ...

最佳答案

对于空值,它的行为会有所不同,所以这取决于你想要发生什么;你提到 NullReferenceException 没问题,但引用的代码中没有任何内容会引发此问题,因此它可能会导致下游出现意外错误。

我从来没有,但我总是想添加:

static bool IsNullOrEmpty(this string value) {
    return string.IsNullOrEmpty(value);
}

所以我可以使用:

if (s.IsNullOrEmpty()) foo();

关于c# - 我可以安全地忽略 CodeAnalysis 警告 : replace string == "" with string. IsNullOrEmpty 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1661024/

相关文章:

c# - 从 Azure Active Directory 访问具有委派许可类型的用户

c# - 根据xml中的信息过滤列表

c# - CRM 4 方法的模拟 CRM 2011 中的 CrmService.CreateAsync(UpdateAsync)

embedded - 如何确定嵌入式系统中的最大堆栈使用量?

c# - 为什么 C# 编译器不能告诉这个函数总是返回或抛出?

c# - 如何编写 nUnit/Moq 来测试通用扩展方法?

entity-framework-5 - EF Code First 迁移导致 CA1701 和 CA1703

database - 如何检查 mule 的选择组件中的有效负载是否为空?

c# - 这个逻辑可以简化吗?

c# - string.IsNullOrEmpty() 似乎不适用于类中类中的字符串