8

反正有 var 是可以为空的类型吗?

这将 i 隐式类型为 int,但是如果我想要一个可为空的 int 怎么办?

var i = 0;

为什么不支持这个:

var? i = 0;

4

7 回答 7

6

var由赋值右侧的表达式或常量隐式键入。 var本身不是一种类型,因此Nullable<var>是不可能的。

于 2009-02-11T16:00:31.897 回答
4

为什么要支持?如果这就是你的意思,你应该说var i = (int?)0;

(好吧,您可能应该只说int? i = 0,但对于更复杂的类型等)

于 2009-02-11T15:58:09.157 回答
2

该问题涉及可空类型。

例如,您不能创建可为空的字符串,这反过来又会阻止您创建可为空的 var,因为 var 可能是字符串。

于 2009-02-11T16:02:39.533 回答
0

我的回答是这样的。“var”是隐式类型的。它通过赋值右侧提供的值确定它是什么类型。如果你告诉它它是可空的,它就不知道是什么类型。请记住,一旦分配,这就是它将永远存在的类型。

于 2009-02-11T16:09:52.450 回答
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;
        }
    }
于 2009-02-11T16:24:33.973 回答
0

VAR 是编译器在编译时确定的隐式类型。它是在首次使用时分配的。IE 当您设置 var I = 1 时,var 是一个 int,因为这就是数字 1 的含义。如果你有 var I = SomeFunction() ,其中某个函数返回一个可为空的 int ,而不是 I 将被设置为 int?。现在,在您想要控制变量类型的情况下,不应使用上述 var 。

所以底线,根据你的例子,使用 var 是错误的,应该明确设置为 int?从头开始。

  • 达罗尔
于 2010-11-01T20:57:07.177 回答
0

在这种情况下,我什至不会使用 var 。如果它是复杂类型或简单类型(例如 int),我将使用类型“对象”。

例子:

//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;
}
于 2012-08-24T15:19:42.240 回答