不能赋值到隐式类型的局部变量

本文关键字:类型 局部变量 赋值 null 不能 | 更新日期: 2023-09-27 18:10:26

我想从数据表dt_branches_global中选择一个字段,如果radioButton_QP被选中,那么数据表将包含一个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();

不能赋值<null>到隐式类型的局部变量

编译器仍然是强类型的,所以它需要找出类型。编译器不可能推断出您将其赋值为null的类型。然后你试着把它分配给两种不同的类型。一个int型数组和一个string型数组。

试试这样写:

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();

不能从null中推断出类型- null可以是任何引用类型。

。这里的问题

var AllBranch_IDs = null;

是编译器需要扫描到下面的代码行来推断AllBranch_IDs的类型(这在c#中是不可能的),并且由于类型的动态性质而无法工作-您将其指定为IEnumerable<string>IEnumerable<int>)。

你可以使用IEnumerable<object>,然后将int括起来:

例如:

     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,尽管结果的使用者需要知道该类型是动态的。