1

データベースにいくつかのテーブルがあり、それらすべてに異なる継承された型の DataRow が含まれています。

さらに、DataGrid でいくつかの処理を行うクラスがあります (データベースのテーブルは DataGrid に接続されています)。

これを行うには、この DataGrid ハンドラーのメソッドの 1 つで、行を正確に継承された DataRow の型にキャストする必要があります。

このようなもの: (TempDataRow as DataRowTypeThatInheritsFromRegularDataRow).SpecialParameter = something;

そのためには、メソッドに継承された DataRow タイプを渡す必要があるため、キャストの方法がわかります。

メソッドは一般的に次のようになります。

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

型を渡すには?通常の 'Type' タイプはコンパイルされません。「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);
}

(ただし、TK が指摘するように、C# 4.0 を使用していた場合は、動的型を使用するだけで完了できます!)

于 2010-10-07T12:52:42.150 に答える
-1

あなたが使用することができます:

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