为什么键入“int”永远不会等于'null'?

时间:2011-05-31 17:39:36

标签: c# null

int n == 0;

if (n == null)    
{  
    Console.WriteLine("......");  
}

表达式(n == null)的结果始终是false,因为是的 类型int值绝不等于null 类型的 int?(请参阅下面的警告)

  

警告CS0472 表达式的结果始终为“false”,因为类型“int”的值永远不会等于“int”类型的“null”

8 个答案:

答案 0 :(得分:72)

如果您希望整数变量允许空值,请将其声明为nullable type

int? n = 0;

注意int之后的?,这意味着类型可以具有值null。可嵌套类型是在.NET Framework v2.0中引入的。

答案 1 :(得分:15)

在C#中,不允许使用未初始化的变量。

所以

int i;
Console.Writeline(i);

导致编译错误。

您可以使用以下内容初始化int,例如:

int anInt = new int();

这将导致int的Default value为0.如果您希望拥有泛型int,则可以使用语法

使int可为空
int? nullableInt = null;

答案 2 :(得分:5)

因为int是值类型而不是引用类型。 C#语言规范不允许int包含null。尝试编译此声明:

int x = null ;

看看你得到了什么。

您收到编译器警告,因为它是一个毫无意义的测试,编译器知道它。

答案 3 :(得分:3)

.NET中的“值类型”(如int,double和bool)根据定义不能为空 - 它们始终具有指定的实际值。查看this good intro以评估类型与参考类型。

答案 4 :(得分:2)

NULL的使用通常适用于指针和引用。分配给整数的值0不为空。但是,如果您可以指定一个指向整数的指针并将其指定为NULL,则该语句有效。

总结=>

 /*Use the keyword 'null' while assigning it to pointers and references. Use 0 for integers.*/

答案 5 :(得分:2)

非常简单地说,int是一个非常基本的项目。它小而简单,因此可以快速处理。它直接作为值处理,而不是沿对象/指针模型处理。因此,它没有合法的“NULL”值。它只包含它包含的内容。 0表示0.与指针不同,0表示为NULL。存储0的对象仍然具有非零指针。

如果你有机会,花点时间做一些老式的C或装配工作,它会变得更加清晰。

答案 6 :(得分:1)

不,因为int是值类型。 intValue类型,例如Datedouble等。因此无法分配null值。

答案 7 :(得分:1)

 public static int? n { get; set; } = null;

OR

 public static Nullable<int> n { get; set; }

 public static int? n = null;

 public static int? n

或者只是

 public static int? n { get; set; } 


    static void Main(string[] args)
    {


    Console.WriteLine(n == null);

     //you also can check using 
     Console.WriteLine(n.HasValue);

        Console.ReadKey();
    }

null关键字是一种表示空引用的文字,它不引用任何对象。 在编程中,可为空的类型是某些编程语言的类型系统的功能,它允许将值设置为特殊值NULL,而不是数据类型的常见可能值。

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/null https://en.wikipedia.org/wiki/Null