反射:对象被赋值

Reflection: object is typed assigned

如何从 Doit-method() 的参数(类型为 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 关键字来允许后期绑定调用。它会比使用 Reflection API 看起来更好。像这样:

private static string Doit(object parameter)
{
    var field = ((dynamic)parameter).GetField("MyString");
    return field.GetValue("MyString").ToString();
}

但是请注意,就像使用反射 API 一样,如果您在使用 dynamic 时方法调用错误,编译器将无法帮助您。它会在运行时失败。

编辑

如果你想投反对票,没关系,但我很感激它伴随着建设性的评论。