2009-02-11 2 views
4

Есть ли в любом случае, чтобы var имел тип NULL?nullable var с использованием неявной типизации в C#?

Это неявно описывает i как int, но что, если я хочу иметь значение nullable int?

var i = 0;

Почему бы не поддержать это:

var? i = 0;

+1

Ваш вопрос или «Почему C# не разрешает это?» Первый, на который мы можем ответить, но второй принадлежит Microsoft (мы можем только догадываться). –

ответ

3

Почему поддержать его? Если это то, что вы имеете в виду, вместо этого вы должны сказать var i = (int?)0;.

(Ну, вы, вероятно, следует просто сказать int? i = 0, но и для более сложных типов, и т.д.)

4

var набирается неявно выражением или константа в правой части задания. var сам по себе не является типом, поэтому Nullable<var> невозможно.

2

Проблема связана с типами с нулевым значением.

Например, вы не можете создать нулевую строку, которая, в свою очередь, не позволит вам создавать nullable var, так как var может быть строкой.

0

Мой ответ подобен этим линиям. «var» вводится неявно. Он определяет, какой тип это значение, указанное в правой части задания. Если вы скажете, что он обнулен, он не знает, какой тип быть. Помните, как только он назначен, это тот тип, который будет навсегда.

0

Попробуйте это - это то, о чем вы говорите?

static void Main(string[] args) 
    { 
     for (int i=0; i < 10; i++) 
     { 
      var j = testMethod(); 
      if (j == null) 
      { 
       System.Diagnostics.Debug.WriteLine("j is null"); 
      } 
      else 
      { 
       System.Diagnostics.Debug.WriteLine(j.GetType().ToString()); 
      } 
     } 
    } 

    static int? testMethod() 
    { 
     int rem; 
     Math.DivRem(Convert.ToInt32(DateTime.Now.Millisecond), 2, out rem); 
     if (rem > 0) 
     { 
      return rem; 
     } 
     else 
     { 
      return null; 
     } 
    } 
0

VAR - неявный тип, определенный компилятором во время компиляции. Он присваивается при первом использовании. IE, когда вы устанавливаете var I = 1, var является int, потому что это то, что число 1. Если у вас вместо этого есть var I = SomeFunction(), где некоторая функция возвращает значение nullable int, то я буду установлен как int ?. Теперь с этим указанным var не следует использовать в случае, когда вы хотите контролировать тип переменной.

Итак, нижняя строка в соответствии с вашим примером с использованием var неверна и должна быть явно установлена ​​в int? от начала.

  • Дэрролл
0

Я бы даже не использовать вар в этом случае. Если это сложный тип или простой, например int, я бы использовал тип «object».

Пример: "как я могу это сделать в C#"

//Define all global class variables 
List<int> m_lInts = New List<int>(); 
List<string> m_lStrs = New List<string>(); 

public static object FindMyObject(string sSearchCritera) 
{ 
    //Initialize the variable 
    object result = null; 

    if (result == null) 
    { 
    //Search the ints list 
    foreach(int i in m_lInts) 
    { 
     if (i.ToString() == sSearchCritera) 
     { 
     //Give it a value 
     result = (int)i; 
     } 
    } 
    } 

    if (result == null) 
    { 
    //Search the ints list 
    foreach(string s in m_lStrs) 
    { 
     if (s == sSearchCritera) 
     { 
     //Give it a value 
     result = (string)s; 
     } 
    } 
    } 

    //Return the results 
    return result; 
} 
Смежные вопросы