如何实现类型指定的泛型方法?

时间:2013-02-27 08:14:26

标签: c# generics

我有课程MyClass<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
        }

        ...
    }

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 != null是否为假,因为anyTypeValue开始为null,或者anyTypeValue 不是字符串

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