2016-07-29 45 views
3

我在考试中看到过这个代码示例问题,它完美地工作。什么是“int?”在C#类型中

namespace Trials_1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int? a = 9; 
      Console.Write("{0}", a); 
     } 
    } 
} 

但是,下面的代码会引发错误CS0266。

namespace Trials_1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int? a = 9; 
      int b = a; 
      Console.Write("{0},{1}", a, b); 
     } 
    } 
} 

有人可以详细解释我吗?

+0

的可能的复制[如何转换C#可空int到int](http://stackoverflow.com/questions/5995317/how-to-convert-c-sharp-nullable-int-to-int) – MickyD

回答

4

这是一个C#nullable types

空类型表示可以分配空的值值型变量。您不能基于引用类型创建可为空的类型。 (引用类型已支持null值。)

此行int b = a;抛出一个错误,因为你不能直接分配int类型为nullable int类型。换句话说,int数据类型不能接受null的值。

1

一些信息上的错误CS0266

无法隐式转换类型 '类型1' 到 '2型'。存在明确的转换(您是否缺少转换?) 当您的代码尝试在不能隐式转换的两种类型之间进行转换时,会出现此错误,但显式转换可用。

可空int(int?)不能简单地转换为int。默认情况下,int不能为空,因此试图将可以为null的内容转换为不能为null的内容会导致出现此错误。因为你试图做出这个假设,编译器告诉你,你不能。

请参阅this发布如何从可空int转换为int。

2

int?Nullable<int>的简写,并且指示可以将值null分配给该变量。

在给出的示例中,变量b的类型是int,它不能接受值Nullable<int>

有关更多信息,请参阅This MSDN article

2

如果你想转换一个int?为INT,你要投它:

int? a = 9; 
int b = (int)a; 

或者:

int b = a.Value; 

顺便说一句:这woont给任何问题:

int a = 9; 
int? b = a; 
0

变量bint类型的,你是试图将int?分配给int。这将是错误的分配(如果a为空,那么你可以将其分配给非空的对象b,所以编译器将不允许这样):另外,您可以使用:

int? a = 9; 
int b = a == null ? 0 : 1; 
Console.Write("{0},{1}", a, b); 
相关问题