我的数据库中有几个表,它们都包含一个不同的继承类型的DataRow。
另外,我有一个应该在我的DataGrid中处理一些东西的类 (我的数据库表连接到DataGrids)。
为此,此DataGrid处理程序中的一个方法必须将行转换为DataRow的确切继承类型。
这样的事情: (TempDataRow as DataRowTypeThatInheritsFromRegularDataRow).SpecialParameter = something;
为了做到这一点,我必须传递继承的DataRow类型的方法,因此它将知道如何进行转换。
该方法通常如下所示:
public void DoSomething(DataRowType Type) { (TempDataRow as Type).SpecialParameter = something; }
如何传递类型? 常规“类型”类型无法编译。 如果我只传递'DataRow',它将不知道如何进行投射。
答案 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")