在我的反射代码中,我的通用代码部分遇到了问题。特别是当我使用字符串时。
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)构造函数。复制字符串是没有意义的,您传递给构造函数的字符串已经是该字符串的完美实例。
因此,通过测试字符串大小写来解决您的问题:
var oType = oVal.GetType();
if (oType == typeof(string)) return oVal as string;
else return Activator.CreateInstance(oType, oVal);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)