我有课程MyClass<T> where T : IComparable
,我希望实现一个方法,如果T
为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
}
...
}
答案 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
会更好。