2016-07-29 2 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# nullable int to 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:

Не может неявно преобразовать тип 'type1' до 'type2'. Явное преобразование существует (вы пропускаете листинг?) Эта ошибка возникает, когда ваш код пытается преобразовать два типа, которые не могут быть неявно преобразованы, но где доступно явное преобразование.

Неверный int (int?) не может быть преобразован просто преобразован в int. Значение int по умолчанию не может быть нулевым, поэтому попытка конвертировать то, что может быть null, к тому, что не может быть null, дает вам эту ошибку. Поскольку вы пытаетесь сделать это предположение, компилятор говорит вам, вы не можете.

См. Сообщение this о том, как преобразовать из значения null с int в int.

2

int? является сокращением для Nullable<int> и указывает, что переменной можно присвоить значение null.

В приведенном примере тип переменной b является int, который не может принимать значение Nullable<int>.

Для получения дополнительной информации см. This MSDN article.

2

Если вы хотите, чтобы преобразовать int? к междунар, вы должны бросить его:

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

Или:

int b = a.Value; 

BTW: это woont дать любую проблему:

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

Переменная b имеет тип int и вы пытаясь присвоить int?int.который будет неправильно задания (если a имеет нулевое значение, то вы не можете назначить его Ненулевой объект b, поэтому компилятор не допустит этого): в качестве альтернативы вы можете использовать:

int? a = 9; 
int b = a == null ? 0 : 1; 
Console.Write("{0},{1}", a, b); 
Смежные вопросы