C#使用不同类型的System.Data.Linq.Tables将变量设置为var

时间:2015-11-19 10:32:11

标签: c#

我有一个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;
}

这可能吗?

3 个答案:

答案 0 :(得分:3)

var不会使变量具有动态类型。相反,它只是告诉编译器从赋值右侧推断出类型的一种方法。

因此,var something;var something = null;永远不会独立,因为编译器无法在编译时静态推断类型。

当作业的右侧具有实际类型时,您只能使用var,然后var相当于明确提及该类型。

在您的情况下,您必须指定显式类型,并且为了能够编译,您需要使用可从这三种类型的数据上下文属性中分配的类型。例如。它需要是这些表类型的基类型。

对于System.Data.Linq.Table<TEntity>,您可以使用它实现的任何非通用接口。根据您的需要,您之后要对变量做什么,您可能希望选择一个而不是另一个。例如ITableIQueryable

答案 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;