1

我有一个通用方法,我想为Strings.

我发现DirectCast(DirectCast(value, Object), String)获得了String价值(当我已经确认时GetType(T) Is GetType(String))并且DirectCast(DirectCast(newvalue, Object), T)正如在类似问题的许多答案中提到的那样有效。

但是还有什么更优雅的东西吗?它是高性能的吗?

4

2 回答 2

2

在这种特殊情况下,有一个更简单的选择:调用ToString()值。对于字符串,这将只返回原始引用。

在一般情况下,您确实需要向上转换为对象并再次向下转换,不幸的是这非常难看。在性能方面,我会很惊讶地发现这无论如何都是瓶颈——但我怀疑这个ToString()调​​用和其他任何东西一样有效。

于 2010-07-25T08:37:21.850 回答
0

我现在实际上已经用 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 回答的评论中所说的那样)。

于 2010-07-27T01:44:35.320 回答