是否可以在 C# 中执行类似的操作:
public void DoSomething<T>(T t)
{
if (T is MyClass)
{
MyClass mc = (MyClass)t
...
}
else if (T is List<MyClass>)
{
List<MyClass> lmc = (List<MyClass>)t
...
}
}
Yes:
if (typeof(T) == typeof(MyClass))
{
MyClass mc = (MyClass)(object) t;
}
else if (typeof(T) == typeof(List<MyClass>))
{
List<MyClass> lmc = (List<MyClass>)(object) t;
}
您需要通过强制转换为对象有点奇怪,但这就是泛型的工作方式 - 泛型类型的转换没有您想象的那么多。
当然,另一种选择是使用正常的执行时间检查:
MyClass mc = t as MyClass;
if (mc != null)
{
// ...
}
else
{
List<MyClass> lmc = t as List<MyClass>;
if (lmc != null)
{
// ...
}
}
这将与第一个代码块的行为不同,如果t
当然是空的。
I would try然而,尽可能避免这种代码 - 有时可能是必要的,但通用方法的想法是能够编写generic对于任何类型都以相同方式工作的代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)