【问题标题】:Reflection: object is typed assigned反射:对象类型被赋值
【发布时间】:2015-09-26 18:08:50
【问题描述】:

如何从 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();
    }

【问题讨论】:

标签: c# reflection


【解决方案1】:

我假设您的 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 时调用错误的方法,编译器将无法帮助您。它会在运行时失败。

编辑

如果您想投反对票,那没关系,但如果您提出建设性意见,我将不胜感激。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多