我想从数据表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();
答案 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
,尽管结果的使用者需要知道该类型是动态的。