154

仮説的には、これを行うと便利です:

foo.GetColumnValues(dm.mainColumn, int)
foo.GetColumnValues(dm.mainColumn, string)

ここで、GetColumns メソッドは、渡された型に応じて内部で別のメソッドを呼び出します。

はい、ブール値フラグなどとして実行できます。おそらくこれを渡す方法があるかどうか疑問に思ったので、次のように尋ねます。

typeof(arg[1]) など...

メソッドをオーバーライドしたり、ジェネリックを使用したりすることもできます-これを行うにはさまざまな方法があることを知っています。これが可能かどうか興味がありました。

4

7 に答える 7

249

2 つの一般的なアプローチがあります。まず、あなたは合格することができますSystem.Type

object GetColumnValue(string columnName, Type type)
{
    // Here, you can check specific types, as needed:

    if (type == typeof(int)) { // ...

これは次のように呼び出されます。int val = (int)GetColumnValue(columnName, typeof(int));

他のオプションは、ジェネリックを使用することです。

T GetColumnValue<T>(string columnName)
{
    // If you need the type, you can use typeof(T)...

これには、ボクシングを回避し、型の安全性を提供するという利点があり、次のように呼び出されます。 int val = GetColumnValue<int>(columnName);

于 2012-06-08T20:22:43.360 に答える
24

foo.GetColumnValues(dm.mainColumn, typeof(string))

または、一般的な方法を使用できます。

public void GetColumnValues<T>(object mainColumn)
{
    GetColumnValues(mainColumn, typeof(T));
}

そして、次のように使用できます。

foo.GetColumnValues<string>(dm.mainColumn);
于 2012-06-08T20:22:21.833 に答える
16

型を引数として渡すことができますが、そのためには次を使用する必要がありますtypeof

foo.GetColumnValues(dm.mainColumn, typeof(int))

メソッドは type のパラメーターを受け入れる必要がありますType


ここで、GetColumns メソッドは、渡された型に応じて内部で別のメソッドを呼び出します。

この動作が必要な場合は、型を引数として渡すのではなく、型パラメーターを使用する必要があります。

foo.GetColumnValues<int>(dm.mainColumn)
于 2012-06-08T20:22:22.383 に答える
8
foo.GetColumnValues(dm.mainColumn, typeof(int));
foo.GetColumnValues(dm.mainColumn, typeof(string));

またはジェネリックを使用する:

foo.GetColumnValues<int>(dm.mainColumn);
foo.GetColumnValues<string>(dm.mainColumn);
于 2012-06-08T20:23:10.607 に答える
1

これを行うことができます。typeof()

foo.GetColumnValues(typeof(int))

public void GetColumnValues(Type type)
{
    //logic
}
于 2012-06-08T20:22:31.297 に答える
0

Type 型の引数を使用できます - iow、typeof(int) を渡します。(おそらくより効率的な) アプローチにジェネリックを使用することもできます。

于 2012-06-08T20:22:38.320 に答える