我有一个var
,想要初始化它并通过switch case
并设置var
的变量,但它可以有三个不同的System.Data.Linq.Tables<>
。
dc
是生成的DataClassesDataContext
类。
以下是代码:
var table = null;
switch (scope)
{
case "LT":
table = dc.LT_Contacts;
break;
case "LV":
table = dc.LV_Contacts;
break;
case "SW":
table = dc.SW_Contacts;
break;
}
这可能吗?
答案 0 :(得分:3)
var
不会使变量具有动态类型。相反,它只是告诉编译器从赋值右侧推断出类型的一种方法。
因此,var something;
或var something = null;
永远不会独立,因为编译器无法在编译时静态推断类型。
当作业的右侧具有实际类型时,您只能使用var
,然后var
相当于明确提及该类型。
在您的情况下,您必须指定显式类型,并且为了能够编译,您需要使用可从这三种类型的数据上下文属性中分配的类型。例如。它需要是这些表类型的基类型。
对于System.Data.Linq.Table<TEntity>
,您可以使用它实现的任何非通用接口。根据您的需要,您之后要对变量做什么,您可能希望选择一个而不是另一个。例如ITable
或IQueryable
。
答案 1 :(得分:2)
您需要选择最合适的公共接口或基础非泛型类。
如果是System.Data.Linq.Table<T>
,它看起来像是ITable
:
ITable table;
switch (scope)
{
case "LT":
table = dc.LT_Contacts;
break;
case "LV":
table = dc.LV_Contacts;
break;
case "SW":
table = dc.SW_Contacts;
break;
default:
throw new Exception();
}
显然,您只能与ITable
界面的成员合作。
答案 2 :(得分:0)
因为没有绑定到null的类型,所以不能将null赋给var变量。相反,你可以做同样的事情。
var x= (DataType)null;
例如: - var x= (string)null;