1

クラスがあり、 isMyClass<T> where T : IComparableの場合に呼び出されるメソッドを実装したいと考えています。どうやってやるの?TString

今、私は次のコードを持っています:

public void Method()
    {
        ... 

        Type typeParameterType = typeof(T);
        if (typeParameterType.Equals(typeof(String))) 
        {
            // here I can't do (String) anyTTypeValue
            // to call handleString(String) method
        }

        ...
    }
4

2 に答える 2

3

as演算子を利用して、valStringnull でないかどうかを確認できます。次に、string特定のプロパティとメソッドにアクセスできます。次のコード スニペットは、主なアイデアを示します。

public void Method<T>(T val)
{
    string valString = val as string;
    if(valString != null)
    {
        Console.WriteLine (valString.Length);
    }
}

Method("tyto"); //prints 4
Method(5); //prints nothing
于 2013-02-27T08:28:21.823 に答える
2

試す :

(string)(object) anyTypeValue;

ちなみに、あなたはそれをすべて行う必要はありません-あなたはただ言うことができます:

if(anyTypeValue is string)
{
    string strValue = (string)(object)anyTypeValue;
    ...
}

編集:

@Ilyaが提案asしたように、参照型とNullable<T>型の場合に使用できます。は参照型なのでstring、次のことができます。

var strValue = anyTypeValue as string;
if(strValue != null)
{
    ...
}

intただし、 :で同じことを行うことはできません。

var intValue = anyTypeValue as int; //compiler error

また、最初からであったため、または文字列ではなかったためにstrValue != nullfalseであるかどうかがわからないことにも注意してください。anyTypeValuenullanyTypeValue

いくつかのユースケースでは、これらは問題ではないので、使用asすることが望ましいでしょう。

于 2013-02-27T08:18:02.103 に答える