我有一个通用方法,我想为Strings
.
我发现DirectCast(DirectCast(value, Object), String)
获得了String
价值(当我已经确认时GetType(T) Is GetType(String)
)并且DirectCast(DirectCast(newvalue, Object), T)
正如在类似问题的许多答案中提到的那样有效。
但是还有什么更优雅的东西吗?它是高性能的吗?
我有一个通用方法,我想为Strings
.
我发现DirectCast(DirectCast(value, Object), String)
获得了String
价值(当我已经确认时GetType(T) Is GetType(String)
)并且DirectCast(DirectCast(newvalue, Object), T)
正如在类似问题的许多答案中提到的那样有效。
但是还有什么更优雅的东西吗?它是高性能的吗?
在这种特殊情况下,有一个更简单的选择:调用ToString()
值。对于字符串,这将只返回原始引用。
在一般情况下,您确实需要向上转换为对象并再次向下转换,不幸的是这非常难看。在性能方面,我会很惊讶地发现这无论如何都是瓶颈——但我怀疑这个ToString()
调用和其他任何东西一样有效。
我现在实际上已经用 Reflector 分析了代码(但实际上只关心 ILDASM 输出的等效项——事实上,C# 和 VB.NET 渲染器不会在任一方向显示转换为对象):
DirectCast(DirectCast(value, Object), String)
编译为
box !!T
castclass string
但DirectCast(DirectCast(newvalue, Object), T)
编译为
unbox.any !!T
所以我对此感到满意(因为我真的只关心回归 T,正如我在对 Jon Skeet 回答的评论中所说的那样)。