【问题标题】:GetMethod equivalent in .NET Standard.NET Standard 中的 GetMethod 等效项
【发布时间】:2017-10-16 19:39:03
【问题描述】:

.NET Framework 中,您可以轻松地反映方法。例如:

var methodInfo = typeof(object).GetMethod("MemberwiseClone", bindingFlags);

然而,在 .NET Standard 项目中,编译器会抱怨:

错误 CS1061:“类型”不包含“GetMethod”的定义和 没有扩展方法“GetMethod”接受类型的第一个参数 可以找到“类型”(您是否缺少 using 指令或 汇编参考?)

问:如何使用.NET Standard 执行等效反射?

【问题讨论】:

    标签: c# .net-standard


    【解决方案1】:

    对于 .NET Core 1.x 中的几乎所有反射,您需要 TypeInfo 而不是 Type

    System.Reflection命名空间中有GetTypeInfo的扩展方法,所以你想要:

    using System.Reflection; // For GetTypeInfo
    ...
    var methodInfo = typeof(object).GetTypeInfo().GetMethod("MemberwiseClone", bindingFlags);
    

    请注意,TypeInfo.GetMethod() 不存在早于 1.6 的 .NET Standard,但 TypeInfo.DeclaredMethods 自 1.0 以来一直存在。

    .NET Standard 2.0 将成员重新引入System.Type(作为将大部分桌面框架恢复到 .NET Standard 的一部分),因此在面向 2.0+ 时您无需经历这个过程。

    【讨论】:

    • 值得注意的是,在 .NET Standard 2.0 中,您只需执行 typeof(object).GetMethod
    • @Evk:是的,会注意到的。
    • 看来 VS 2017.4 附带 1.6。
    • @l33t:这不是 VS 附带的问题 - 你应该有意识地选择你希望 你的项目 的目标版本。这完全取决于谁将使用该项目。
    猜你喜欢
    • 1970-01-01
    • 2017-03-12
    • 2017-10-13
    • 2010-09-20
    • 2010-10-19
    • 2011-12-22
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多