Набор текста: как передать тип? - PullRequest
1 голос
/ 07 октября 2010

У меня есть несколько таблиц в моей базе данных, и все они содержат другой наследуемый тип DataRow.

Кроме того, у меня есть класс, который должен обрабатывать некоторые вещи в моей DataGrid (Мои таблицы базы данныхподключен к DataGrids).

Чтобы сделать это, один из методов в этом обработчике DataGrid должен привести строки к точному унаследованному типу DataRow.

примерно так: (TempDataRow как DataRowTypeThatInheritsFromRegularDataRow) .SpecialParameter = нечто;

Чтобы сделать это, я должен передать метод унаследованного типа DataRow, чтобы он знал, как выполнять приведение.

Методбудет выглядеть примерно так:

public void DoSomething (DataRowType Type) {(TempDataRow as Type) .SpecialParameter = кое-что;}

Как передать тип?Обычный тип 'Type' не компилируется.и если я передам только «DataRow», он не будет знать, как выполнить приведение.

Ответы [ 3 ]

1 голос
/ 07 октября 2010

Если вы используете 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

0 голосов
/ 07 октября 2010

Есть несколько способов сделать это.

Сначала вы можете найти общий базовый класс или интерфейс, который разделяют все типы, а затем сделать так, чтобы DoSomething () взял этот базовый класс или интерфейс, или, если вы хотите быть полностью динамичным, вы можете использовать отражение. Сложно сказать, как это сделать, потому что вы не дали конкретного примера:

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

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

(хотя, если вы используете C # 4.0, как указывает TK, вы можете просто использовать динамический тип и покончить с этим!)

0 голосов
/ 07 октября 2010

Вы можете использовать:

TempDataRow as Type.GetType("DataRowTypeName")
...