Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#使用不同类型的System.Data.Linq.Tables将变量设置为var_C# - Fatal编程技术网

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

C#使用不同类型的System.Data.Linq.Tables将变量设置为var,c#,C#,我有一个var,我想对它进行初始化,通过一个开关盒,设置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;

我有一个
var
,我想对它进行初始化,通过一个
开关盒
,设置
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;
}

这可能吗?

您需要选择最合适的通用接口或基础非泛型类

对于
System.Data.Linq.Table
,它看起来像是
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
接口的成员。

您需要选择最合适的通用接口或基本非泛型类

对于
System.Data.Linq.Table
,它看起来像是
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
接口的成员。

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

因此,
var某物
var=null永远无法独立运行,因为编译器无法在编译时静态推断类型

只有当赋值的右侧具有实际类型时,才可以使用
var
,然后
var
相当于显式提到该类型

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


在的情况下,您可以使用它实现的任何非通用接口。根据您的需要,您可能希望选择一个变量,而不是另一个变量。例如,
ITable
,或
IQueryable

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

因此,
var某物
var=null永远无法独立运行,因为编译器无法在编译时静态推断类型

只有当赋值的右侧具有实际类型时,才可以使用
var
,然后
var
相当于显式提到该类型

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


在的情况下,您可以使用它实现的任何非通用接口。根据您的需要,您可能希望选择一个变量,而不是另一个变量。例如
ITable
,或
IQueryable

由于没有绑定到null的类型,所以不能将null分配给var变量。相反,您可以按如下所示执行相同的操作

var x= (DataType)null;

例如:-
var x=(字符串)null

由于没有绑定到null的类型,所以不能将null分配给var变量。相反,您可以按如下所示执行相同的操作

var x= (DataType)null;

例如:-
var x=(字符串)null

通常,变量有一个类型,您不能在运行时更改它的类型。为什么要将三张不同的桌子视为同一张桌子?您将如何处理
表格
?此外,如果有三个不同的表存储相似的内容,这通常表明数据库设计中存在错误。也许您应该使用一个带有附加列的表
ContactType
。通常,变量有一个类型,您不能在运行时更改它的类型。为什么要将三张不同的桌子视为同一张桌子?您将如何处理
表格
?此外,如果有三个不同的表存储相似的内容,这通常表明数据库设计中存在错误。也许您应该使用一个带有附加列的表
ContactType