.NET中的可空类型

时间:2011-04-01 09:45:01

标签: c# .net

 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条款总是假的。但为什么呢?

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

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

你有一个类型为object的变量,它不包含任何内容。没有办法知道其他人可能计划在该变量中放置什么。


或者C# get type of null object的回答是:

  

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

答案 2 :(得分:2)

如果提供的表达式为非null,则 表达式的计算结果为true。因此,表达式(值为int?&& value == null)始终等于false

答案 3 :(得分:1)

这应该有效:

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