c# - 我如何将 Activator.CreateInstance 与字符串一起使用?

标签 c# .net reflection activator

在我的反射代码中,我的通用代码部分遇到了问题。特别是当我使用字符串时。

var oVal = (object)"Test";
var oType = oVal.GetType();
var sz = Activator.CreateInstance(oType, oVal);

异常

An unhandled exception of type 'System.MissingMethodException' occurred in mscorlib.dll

Additional information: Constructor on type 'System.String' not found.

我出于测试目的尝试了这个,它也出现在这个单衬里

var sz = Activator.CreateInstance("".GetType(), "Test");

原来是我写的

var sz = Activator.CreateInstance("".GetType());

但是我得到了这个错误

Additional information: No parameterless constructor defined for this object.

如何使用反射创建字符串?

最佳答案

请记住,字符串类是不可变的。创建后无法更改。这就解释了为什么它没有无参数构造函数,它永远不能生成空字符串以外的有用字符串对象。那在C#语言中已经有了,就是“”。

相同的推理适用于 string(String) 构造函数。复制字符串没有意义,您传递给构造函数的字符串已经是该字符串的完美实例。

因此,通过测试字符串大小写来解决您的问题:

var oType = oVal.GetType();
if (oType == typeof(string)) return oVal as string;
else return Activator.CreateInstance(oType, oVal);

关于c# - 我如何将 Activator.CreateInstance 与字符串一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2092530/

相关文章:

c# - 基于属性的项目之间的反射(reflection)

c# - 将字典展平为逗号分隔的键/值对集列表

c# - 在 Entity Framework 中处理存储过程

c# - LayoutKind.Sequential 当子结构具有 LayoutKind.Explicit 时未遵循

c# - XDocument.Save() 在每个 XElement 上添加不需要的命名空间

.net - 如何让 Access 2010 数据库与 .NET 2 一起工作

c# - 如何在 WinForms 中删除一个 DateTimePicker 实例?

c# - 线程安全和局部变量

java - 兼容反射的设计模式

c# - 用类常量值填充 List<string> 的方法。 C#