首页 > 解决方案 > 在反射中使用字符串而不是 System.String?

问题描述

我最近遇到了这个(投票率很高的)社区维基,它指出

你不能string在反射中使用;你必须使用String.

但是,由于答案是从 2011 年开始的,并且由于我从未遇到过string在反射场景中使用的任何问题,所以我想知道该声明是否仍然成立。

此外,考虑到and都被编译为stringSystem.StringSystem.Stringstring只是 的别名System.String,我认为没有任何潜在的差异,更不用说问题了。


在反射中使用时,我试图找到差异或问题string,但我找不到:

获取类型:

string a = "Foo";
System.String b = "Foo";

Type aType = a.GetType(); // yields System.String - big surprise ;)
Type bType = a.GetType(); // yields System.String

在运行时调用方法:

string a = "Foo Bar";
System.String b = "Foo Bar";

bool aContainsBar = (bool) a.GetType()
                            .GetMethod("Contains")
                            .Invoke(a, new object[] { "Bar" });
// yields true - big surprise again ;)

bool bContainsBar = (bool) b.GetType()
                            .GetMethod("Contains")
                            .Invoke(a, new object[] { "Bar" });
// also yields true

200+ 票不会说谎 - 我对使用stringSystem.String反射之间存在/曾经有什么区别非常感兴趣。

陈述仍然正确吗?如果是这样,您能否提供一个示例来说明string和之间的区别System.String

标签: c#string

解决方案


推荐阅读