繁体   English   中英

为什么ReSharper在动态类型上建议可能的NullReferenceException?

[英]Why is ReSharper suggesting a possible NullReferenceException on a dynamic type?

如果我编写以下代码,ReSharper会警告我可能存在NullReferenceException 但是我在上面的语句中明确检查null 有什么关于dynamic我不知道(是假设它可能由IEnumerable或类似的东西支持)? 或者这是ReSharper的故障? 或者是其他东西?

dynamic user = connection.Query("SELECT ...").FirstOrDefault(); // Dapper Extension
if (user == null)
    return null;

return new User(user.username);
//              ^^^^
// (local variable) dynamic user
//
// Possible 'System.NullReferenceException'

问题是user == null是一个动态调用; R#不能假设user对象的运行时类型将具有正常工作的相等运算符。 它很容易有:

public static bool operator ==(Foo x, Foo y) { return false; }
public static bool operator !=(Foo x, Foo y) { return true; }

在这种情况下,即使user变量是null引用, user == null也总是返回false

尝试将代码更改为:

if (ReferenceEquals(user, null)) return null;
return new User(user.username);

注意:仅当“假定实体值可以为空”选项设置为“当实体没有显式的NotNull属性”时,才会出现此问题。

试试这个 :

dynamic user = connection.Query("SELECT ...").FirstOrDefault(); // Dapper Extension
if (user != null)
    return new User(user.username);

return null;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM