反射:对象类型被赋值
本文关键字:赋值 类型 对象 反射 | 更新日期: 2023-09-27 18:01:34
如何从doit方法()的参数(类型为SomeObject)变量中获得字段?我不能更改Doit方法的签名,也不能在Doit方法中使用SomeObject。
static void Main(string[] args)
{
Doit(typeof(SomeObject));
}
private static string Doit(object parameter)
{
var field = parameter.GetType().GetField("MyString");
return field.GetValue("MyString").ToString();
}
我假设您的parameter
变量类型为SomeObject
。
通常,你只需要在你的方法内部强制转换,像这样:
private static string Doit(object parameter)
{
var field = ((SomeObject)parameter).GetField("MyString");
return field.GetValue("MyString").ToString();
}
如果您确实无法从该方法中访问SomeObject
类型,您可以尝试使用dynamic关键字来允许后期绑定调用。它看起来会比使用反射API更好。这样的:
private static string Doit(object parameter)
{
var field = ((dynamic)parameter).GetField("MyString");
return field.GetValue("MyString").ToString();
}
但是要注意,就像使用反射API一样,如果您在使用dynamic
时得到错误的方法调用,编译器将无法帮助您。它会在运行时失败
编辑
如果你想要反对,那没关系,但如果你的意见伴随着建设性的评论,我真的很感激。