在我的反射代码中,我的通用代码部分遇到了问题。特别是当我使用字符串时。
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/