反射:对象类型被赋值

本文关键字:赋值 类型 对象 反射 | 更新日期: 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时得到错误的方法调用,编译器将无法帮助您。它会在运行时失败

编辑

如果你想要反对,那没关系,但如果你的意见伴随着建设性的评论,我真的很感激。