1

我的数据库中有几个表,它们都包含不同的继承类型的 DataRow。

此外,我有一个类应该在我的 DataGrid 中处理一些事情(我的数据库表连接到 DataGrids)。

为此,此 DataGrid 处理程序中的方法之一必须将行强制转换为 DataRow 的确切继承类型。

像这样:(TempDataRow as DataRowTypeThatInheritsFromRegularDataRow).SpecialParameter = something;

为此,我必须将继承的 DataRow 类型传递给该方法,以便它知道如何进行强制转换。

该方法通常如下所示:

public void DoSomething(DataRowType Type) { (TempDataRow as Type).SpecialParameter = something; }

如何传递类型?常规“类型”类型无法编译。如果我只通过“DataRow”,它将不知道如何进行强制转换。

4

3 回答 3

1

如果您使用的是 C# 4.0,那么您是否考虑过使用“动态”类型?

dynamic row = getDataRow();
doSomething( row );

public void doSomething( DataRowTypeThatInheritsFromRegularDataRow row )
{
    // <insert code here>
}

public void doSomething( SomeOtherDataRowType row )
{
    // <insert code here>
}

此示例应在运行时根据 getDataRow() 实际返回的内容选择要调用的函数。

有关 dynaminc 的进一步阅读,请参阅msdn

于 2010-10-07T12:51:01.420 回答
0

有很多方法可以做到这一点。

首先,您可以找到所有类型共享的公共基类或接口,然后让 DoSomething() 采用该基类或接口,或者如果您想要完全动态,您可以使用反射。很难告诉你怎么做,因为你没有给出任何具体的例子:

using System.Reflection;
...
public void DoSomething(object foo) {
    var dataType = foo.GetType();

    type.GetProperty("SomeDynamicName").SetValue(foo, someOtherValue);
}

(虽然如果您使用的是 C# 4.0,正如 TK 指出的那样,您可以只使用动态类型并完成它!)

于 2010-10-07T12:52:42.150 回答
-1

你可以使用:

TempDataRow as Type.GetType("DataRowTypeName")
于 2010-10-07T12:41:17.397 回答