2010-11-24 9 views
0

次のプログラムは "We have something else"を出力します。どのようにして渡される型のデータ型を適切に決定するのですか?ジェネリックスで型を決定する

+0

あなたは何を達成しようとしていますか?文字列が印刷されますか? – strager

答えて

4

キーワードはisです。

if(aType is string) 
    Console.WriteLine("We have a string"); 
else 
    Console.WriteLine("We have something else"); 

この種のロジックを使用する際に注意すべきことの一つはisが予期しない動作につながる可能性のスーパータイプに対してtrueを返すということです。

if(myObj is object) 
    Console.WriteLine("This will always print"); 
else if(myObj is int) 
    Console.WriteLine("This will never print"); 
+0

これでうまくいきません –

+2

あなたの例では、 'string'ではなく' Type'を渡しています。なぜなら、これは "動作していません"という理由です。 –

+0

@Vince:つまり、 'aType.GetType()は文字列です.'は間違った構文です。 Wesleyのように 'aType is string 'でなければなりません。 –

2

(小さい)有限リストからタイプを探している場合は、「is」を使用できます。

0

typeof(string)Typeを返します。

したがって、AFunction<Type>(typeof(string))を呼び出すことをコンパイラが推測します。

GetTypeTypeのインスタンスのタイプTypeを表すTypeを返します。

typeof(Type)typeof(string)と等しくないので、結果はまったく同じです。


あなたは

AFunction<string>("Hello World"); 

void AFunction<T>(T value) 
{ 
    if (value is string) ... 
} 

または

AFunction(typeof(string)); 

void AFunction(Type type) 
{ 
    if (type == typeof(string)) ... 
} 

または

AFunction<string>(); 

void AFunction<T>() 
{ 
    if (typeof(T) == typeof(string)) ... 
} 

を意味しましたか?

void AFunction<T>(T aType) 
{ 
    if ((aType as Type).Name == "String") 
    { 
     Console.WriteLine("We have a string"); 
    } 
    else 
    { 
     Console.WriteLine("We have something else"); 
    } 
} 
+0

いいえ私はタイプのタイプを決定したい –

+1

@Vince:タイプのタイプは 'タイプ'です。 'typeof(string).GetType()== typeof(Type)' – dtb

+1

"タイプのタイプはタイプ" LOL; "です。 –

0

。 あなただけの、次のようにisキーワードを使用し、その後AFunctionにオブジェクトの種類を送信すると:

void AFunction(Object aType) 
{ 
    if (aType is string) { 

     Console.WriteLine ("We have a string"); 

    } else { 
     Console.WriteLine ("We have something else"); 
    } 
} 

をちなみに、私は、ジェネリック型は使用状況のこの種のためではないと思われます。

1

私はあなたがこの状況でジェネリック型を使用する必要はありませんだと思う:あなたはAFunctionこのような何か作ることができ、あなたの現在のコールを使用して

関連する問題