1

我有课MyClass<T> where T : IComparable,我想实现一个将被调用的方法 if Tis String。我怎样才能做到这一点?

现在我有以下代码:

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运算符并检查是否valString不为空。然后,您将可以访问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)
{
    ...
}

但是,你不能用 a 做同样的事情int

var intValue = anyTypeValue as int; //compiler error

另请注意,您无法判断strValue != null是 false 是因为anyTypeValuewasnull开始还是因为anyTypeValuewas not a string

在某些用例中,这些不是问题,因此as最好使用。

于 2013-02-27T08:18:02.103 回答