无法将<null>分配给隐式类型的局部变量</null>

时间:2014-06-27 10:22:14

标签: c# visual-studio-2012

我想从数据表dt_branches_global中选择一个字段,如果radioButton_QP为Checked,那么Data表将包含string字段,否则数据表包含一个int字段。这就是我在做的事情。但是我在初始化变量Var时遇到错误。

var AllBranch_IDs = null;

if (radioButton_QP.Checked == true)   
AllBranch_IDs = dt_branches_global.AsEnumerable().Select(x => x.Field<string>("BusinessSectorID")).ToArray();
else

AllBranch_IDs = dt_branches_global.AsEnumerable().Select(x => x.Field<int>("BusinessSectorID")).ToArray();

2 个答案:

答案 0 :(得分:10)

编译器仍然是强类型的,因此需要弄清楚类型。编译器无法推断您将其分配为null的类型。然后你尝试将它分配给两种不同的类型。一个int数组和一个字符串数组。

尝试类似:

string[] AllBranch_IDs = null;

if (radioButton_QP.Checked == true)   
AllBranch_IDs = dt_branches_global.AsEnumerable().Select(x => x.Field<string>("BusinessSectorID")).ToArray();
else

AllBranch_IDs = dt_branches_global.AsEnumerable().Select(x => x.Field<int>("BusinessSectorID").ToString()).ToArray();

答案 1 :(得分:4)

目前,无法从null推断出类型 - null可以是任何引用类型。

即。这里的问题

var AllBranch_IDs = null;

是编译器需要扫描到以下代码行来推断AllBranch_IDs的类型(无论如何都不可能在C#中),并且由于类型的动态特性 - 您可以为其分配IEnumerable<string>IEnumerable<int>)。

您可以使用IEnumerable<object>,然后打开整理:

e.g:

     IEnumerable<object> AllBranch_IDs = null;

     if (new Random().Next(10) > 5)
     {
        AllBranch_IDs = new [] {1,2,3,4}.Cast<object>().ToArray();
     }
     else
     {
        AllBranch_IDs = new [] {"hello", "world"}.ToArray();
     }

将其声明为dynamic也会编译,即dynamic AllBranch_IDs = null,尽管结果的使用者需要知道该类型是动态的。