C# NET中的可空类型

C# NET中的可空类型,c#,.net,C#,.net,复述者说1和2子句总是错误的。但是为什么呢?如果值是对象,并且为空,那么它是什么类型的?它没有类型 您有一个object类型的变量,它不包含任何内容。无法知道其他人可能计划在该变量中放置什么 或者,答案是: 这就好比问什么样的蛋糕会被放在一个没有标签的空盒子里 如果值是对象,并且为空,那么它是什么类型的?它没有类型 您有一个object类型的变量,它不包含任何内容。无法知道其他人可能计划在该变量中放置什么 或者,答案是: 这就好比问什么样的蛋糕会被放在一个没有标签的空盒子里 如果值为null

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

如果
对象,并且为空,那么它是什么类型的?它没有类型

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


或者,答案是:

这就好比问什么样的蛋糕会被放在一个没有标签的空盒子里


如果
对象
,并且为空,那么它是什么类型的?它没有类型

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


或者,答案是:

这就好比问什么样的蛋糕会被放在一个没有标签的空盒子里


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

这应该可以:

 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;
    //....................
}
这应该起作用:

 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;
    //....................
}

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

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

@Jaimal Chohan,不,它不是Resharper bug。这是一个非常有效的警告。相反@Jaimal。。。Resharper是对的。看起来你需要一份副本。。。它教会了你很多。也许在你的方法中使用泛型?@Jaimal Chohan,不,它不是一个Resharper bug。这是一个非常有效的警告。相反@Jaimal。。。Resharper是对的。看起来你需要一份副本。。。它教会了你很多。也许在你的方法中使用泛型?这应该是一个注释。这不是一个答案。事实上,更改了答案并添加了注释。这应该更有效:if(value==null&&skipmpty)返回null;skipEmpty会改变一切,所以你应该首先评估它。这应该是一个注释。这不是一个答案。事实上,更改了答案并添加了注释。这应该更有效:if(value==null&&skipmpty)返回null;技能改变了一切,所以你应该首先评估它。