【发布时间】:2012-11-08 21:16:35
【问题描述】:
下面是一些快速代码来说明我的问题。有什么办法可以避免这种明显不必要的装箱/拆箱?
public class TestClass<T>
{
public T TestMethod()
{
if (typeof(T) == typeof(bool))
{
return true; // doesn't work
return (T)(object)true; // works, but any way to avoid this?
}
return default(T);
}
}
【问题讨论】:
-
泛型意味着“相同的代码适用于多种类型”。您需要针对不同类型的不同代码,因此您的用例不在泛型的关注范围内。
-
如果您只是要检查方法主体中的类型,为什么首先要使其成为通用类型?
-
.NET 运行时没有优化它吗?
-
@dtb, @Servy:它类似于 LINQ 的
Cast<TResult>(this IEnumerable source),但有一些自定义情况,例如“Y”/“N”需要手动转换为真/假。如果 bool 是我自己的类型,我可以使用显式运算符。所有其他类型都是通用处理的。 -
@TravisGockel:这很可能是真的,但它只能用于泛型的
TestClass<bool>版本。
标签: c# generics boxing unboxing