【问题标题】:Nullable types in .NET.NET 中的可空类型
【发布时间】:2011-04-01 18:45:29
【问题描述】:
 protected static SqlParameter CreateParameter(string name, object value, bool skipEmpty, bool isOutput =false)
 {
    if (skipEmpty && value is string && string.IsNullOrEmpty((string)value))
        return null;
    //1
    if (skipEmpty && value is int? && value == null)
      return null;
    //2
    if (skipEmpty && value is Guid? && value == null)
      return null;
    //....................
}

resharper 说 1 和 2 子句总是错误的。但为什么呢?

【问题讨论】:

  • @Jaimal Chohan,不,这不是 Resharper 错误。这是一个完全有效的警告。
  • 相反@Jaimal... Resharper 是对的。看起来你可以用副本来做......它教会了你很多东西。
  • 也许在你的方法中使用泛型?

标签: c# .net


【解决方案1】:

如果 value 为 null,则不可能从中推断出比 object 更复杂的类型,因此它永远不可能是 int?Guid?

【讨论】:

    【解决方案2】:

    如果valueobject,并且为空,它是什么类型?它没有类型。

    你有一个对象类型的变量,它不包含任何东西。无法知道其他人可能计划在该变量中放置什么。


    或者如C# get type of null object的回答所说:

    这就像问一个没有标签的空盒子里会有什么样的蛋糕。

    【讨论】:

      【解决方案3】:

      如果提供的表达式不为空,is 表达式的计算结果为 true。因此,表达式 (value is int? && value == null) 总是等于 false

      【讨论】:

        【解决方案4】:

        这应该可行:

        if (skipEmpty && ((value is string && string.IsNullOrEmpty((string)value)) || value == null)) return null;
        

        【讨论】:

        • 这应该是一条评论。这不是答案。
        • 确实,改了答案,加了评论。
        • 这应该更正常:if (value == null && skipEmpty) return null;
        • skipEmpty 改变了一切,所以你应该先评估它。
        猜你喜欢
        • 2011-01-31
        • 2021-11-04
        • 2011-06-13
        • 2010-10-21
        • 1970-01-01
        • 1970-01-01
        • 2020-12-19
        相关资源
        最近更新 更多