输入:如何传递类型?

时间:2010-10-07 12:37:15

标签: c# database inheritance datatable datarow

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

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

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

这样的事情: (TempDataRow as DataRowTypeThatInheritsFromRegularDataRow).SpecialParameter = something;

为了做到这一点,我必须传递继承的DataRow类型的方法,因此它将知道如何进行转换。

该方法通常如下所示:

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

如何传递类型? 常规“类型”类型无法编译。 如果我只传递'DataRow',它将不知道如何进行投射。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

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

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

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

答案 2 :(得分:-1)

您可以使用:

TempDataRow as Type.GetType("DataRowTypeName")