问题描述
我正在尝试使用ASP.NET中的字符串转换类型ResourceManager和用于翻译的外部资源文件来获取要在ASP.NET中进行翻译的资源。但是当我执行时,我会看到此错误:
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more @R_687_4045@ion about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 24: Type myProp = element.GetProperty("ResourceManager").GetType();
Line 25: MethodInfo getString = myProp.getmethod("GetString");
Line 26: var r = getString.Invoke(this,new object[] { key });
Line 27: return r.ToString();
Line 28: }
这是我的代码:
protected string getText(string key)
{
Type element = Type.GetType($"Website.Language.{translation}.general");
Type myProp = element.GetProperty("ResourceManager").GetType();
MethodInfo getString = myProp.getmethod("GetString");
var r = getString.Invoke(this,new object[] { key });
return r.ToString();
}
显然,getString
变量返回null,但是方法“ GetString”应该被称为ResourceManager的“ GetString”方法。
有人可以帮我吗?
解决方法
MethodInfo.Invoke
的第一个参数必须是某个对象的实例(据我所知,它的类型必须与您所反映的类型相同,例如Website.Language.{translation}.general
)。 / p>
这可能行不通,而只是向您显示您需要朝哪个方向前进。
protected string getText(string key)
{
Type element = Type.GetType($"Website.Language.{translation}.general");
var instance = Activator.CreateInstance(element);
Type myProp = element.GetProperty("ResourceManager").GetType();
MethodInfo getString = myProp.GetMethod("GetString");
var r = getString.Invoke(instance,new object[] { key });
return r.ToString();
}
另请参见this示例。