【发布时间】:2010-06-29 10:06:25
【问题描述】:
我想做这样的事情:
public static TResult MyCast<TSource, TResult>(TSource item)
{
return (TResult)item;
}
不限制 TSource 或 TResult 并尽可能避免不必要的装箱。
编辑:我想强调一下,我想要一个简单的类型转换,而不是在这里详细的类型转换。铸造失败是完全可以的,比如string 到int。
使用 CLR 2.0 是否有任何明智的方法可以做到这一点?
编辑:这是一个简化版,所以没什么用,是的。 但考虑转换泛型集合,例如:
public static Dictionary<string, TResult> CastValues<TSource, TResult>(this Dictionary<string, TSource> dictionary)
在与我的同事讨论后,似乎没有简单的方法来实现这样的功能(如果可能的话),所以我陷入了针对不同情况的几种非常简单的方法的代码膨胀(即 up - 以及引用类型的向下转换和某些值类型的转换):(
太糟糕了,我不能使用 .NET 4.0 以及 dynamic 等优点。
【问题讨论】:
-
看看stackoverflow.com/questions/2111280/…。可能会给你一些想法。
-
谢谢,但这在我的情况下不是很有用。 :(
-
实际上你应该庆幸你不能使用 .NET 4.0 和动态的,因为你所拥有的是糟糕的计划。您必须在没有通用基类的不同类型层次结构之间进行转换,这是一种非常糟糕的代码气味,并且再多的动态也无法隐藏它。
-
考虑到我被遗留代码库困住,现在需要进行交叉调用,我宁愿拥有我的小型转换例程而不是重新实现它们。跨度>