代码之家  ›  专栏  ›  技术社区  ›  Mark Hurd

专用化泛型变量

  •  1
  • Mark Hurd  · 技术社区  · 14 年前

    我有一个通用方法,我想在其中做一些特殊的事情 Strings .

    我找到了 DirectCast(DirectCast(value, Object), String) 得到 String 价值(当我已经确认 GetType(T) Is GetType(String) ) DirectCast(DirectCast(newvalue, Object), T) 正如在许多类似问题的答案中提到的,这是可行的。

    但是,有没有比这更优雅的,更具表演性的呢?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Jon Skeet    14 年前

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

    在一般情况下,您确实需要上下转换,这是非常难看的。在性能方面,我会很惊讶地发现这是瓶颈——但我 犯罪嫌疑人 这个 托斯特林() 打电话和其他电话一样有效。

        2
  •  0
  •   Mark Hurd    14 年前

    我现在实际分析了使用Reflector的代码(但实际上只关心相当于ildasm输出——事实上,c_和vb.net渲染器不会在两个方向上显示cast to对象):

    DirectCast(DirectCast(value, Object), String) 编译为

     box !!T
     castclass string
    

    但是 DirectCast(DirectCast(newvalue, Object), T) 编译为

     unbox.any !!T
    

    所以我对此很高兴(正如我在对乔恩·斯基特的回答的评论中所说,我只关心回T的角色扮演)。