2012-06-08 11 views
78

にパラメータとして単にタイプを渡します。は私がこれを行うにため仮にそれが便利だろうC#の

はい、私はブールフラグとしてそれを行うか、同様の可能性があり、おそらくこれを渡す方法があった場合、私は疑問に思い、そして尋ねる:

typeof演算(引数[1])または類似の...

また、メソッドをオーバーライドしたり、ジェネリックなどを使用したりすることもできます。これを行う方法はさまざまですが、これが可能かどうかは不思議でした。また

+2

ジェネリックス??????? – leppie

+0

実際にfooが何であるかによって、私の考えは正確です。 'foo.GetColumnValues (dm.mainColumn)'は行く方法です。 –

+1

私が言ったように、これを行うための他の方法があります(ブール値フラグ、ジェネリック、メソッドをオーバーライドしています)。パラメータとして使用できるかどうかは疑問でした。 –

答えて

135

一般的なアプローチは2つあります。int val = (int)GetColumnValue(columnName, typeof(int));

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

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

これがボクシングを回避し、提供するという利点を有する第一に、あなたはこれは以下のように呼ばれることになるSystem.Type

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

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

を渡すことができますいくつかのタイプの安全性は、と呼ばれる:int val = GetColumnValue<int>(columnName);

+0

また、拡張メソッドpublic static T GetColumnValue (この文字列columnName){...}を使用すると、foo.GetColumnValuesと言うことができます(dm.mainColumn) – b729sefc

+0

いくつかの引数を持つメソッドを定義し、そのうちの1つはジェネリックでなければなりませんか?ジェネリックはメソッド引数リストの前に定義されているので、どのメソッドをジェネリックにするべきか、どのように知っていますか? – BadmintonCat

+3

@BadmintonCat 'T Foo (文字列arg1、U arg2)'またはそれに類するもの –

14

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

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

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

を、あなたはそれが好きで使用することができます

foo.GetColumnValues<string>(dm.mainColumn); 
10

あなたは引数として型を渡すことができ、しかしそうするには、typeofを使用する必要があります:

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

このメソッドは、タイプがTypeのパラメータを受け入れる必要があります。 getColumnsメソッドは渡された種類に応じて内部の異なるメソッドを呼び出す


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

foo.GetColumnValues<int>(dm.mainColumn) 
+6

なぜdownvote? –

+1

Upvoteでdownvoteをオフセットするには –

1

は、ちょうどあなたがType型の引数に使用することができますtypeof()

foo.GetColumnValues(typeof(int)) 

public void GetColumnValues(Type type) 
{ 
    //logic 
} 
0

でそれを包む - 、IOWを渡すtypeof演算(int型)。ジェネリックを(おそらくより効率的な)アプローチに使用することもできます。

7
foo.GetColumnValues(dm.mainColumn, typeof(int)); 
foo.GetColumnValues(dm.mainColumn, typeof(string)); 

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

foo.GetColumnValues<int>(dm.mainColumn); 
foo.GetColumnValues<string>(dm.mainColumn); 
+4

投票は何のためですか? –

+2

私はあなたにDVDを書いていませんでしたが、それが呼び出される方法を示していて、関数定義を指定していなかったからかもしれません – JConstantine

+3

人々がスプーンの供給を必要とするときに嫌いです。 MSDNの答え+本当に短い読書で十分です。私は、有権者は反論者であると反論している。 –

関連する問題