Csharp/C#教程:在使用reflection时,如何确定方法是否返回动态类型?分享


在使用reflection时,如何确定方法是否返回动态类型?

使用reflection时,可以检查DynamicAttribute属性的字段,属性,索引器和参数,以确定它们具有动态类型。 但是,这对于Methods不起作用 – 即使它们返回’dynamic’,它们也没有属性,它们的返回类型是’object’(也没有属性)。 Visual Studio为intellisense为外部程序集中的方法执行此操作…可以使用reflection来完成吗?

例如,下面的代码生成此输出:

dynamicField is dynamic DynamicProperty is dynamic Item is dynamic DynamicMethod is NOT dynamic!! dynamicParameter is dynamic 

示例代码:

 using System; using System.Reflection; using System.Runtime.CompilerServices; namespace ReflectDynamics { class Program { static void Main() { var test = typeof(Test); CheckDynamic(test.GetField("dynamicField")); CheckDynamic(test.GetProperty("DynamicProperty")); CheckDynamic(test.GetProperty("Item")); MethodInfo dynamicMethod = test.GetMethod("DynamicMethod"); CheckDynamic(dynamicMethod); CheckDynamic(dynamicMethod.GetParameters()[0]); Console.ReadKey(); } static void CheckDynamic(MemberInfo memberInfo) { bool isDynamic = memberInfo.GetCustomAttributes(typeof(DynamicAttribute), true).Length > 0; Console.WriteLine(memberInfo.Name + (isDynamic ? " is dynamic" : " is NOT dynamic!!")); } static void CheckDynamic(ParameterInfo parameterInfo) { bool isDynamic = parameterInfo.GetCustomAttributes(typeof(DynamicAttribute), true).Length > 0; Console.WriteLine(parameterInfo.Name + (isDynamic ? " is dynamic" : " is NOT dynamic!!")); } } class Test { public dynamic dynamicField; public dynamic DynamicProperty { get { return dynamicField; } } public dynamic this[int index] { get { return dynamicField; } } public dynamic DynamicMethod(dynamic dynamicParameter) { return dynamicField; } } } 

这是因为您需要从方法检查ReturnTypeCustomAttributes上的ReturnTypeCustomAttributes

像这样修改CheckDynamic方法:

 static void CheckDynamic(MemberInfo memberInfo) { bool isDynamic = memberInfo.GetCustomAttributes(typeof(DynamicAttribute), true).Length > 0; var methodInfo = (memberInfo as MethodInfo); if (methodInfo != null) { isDynamic = methodInfo.ReturnTypeCustomAttributes.GetCustomAttributes(typeof(DynamicAttribute), true).Length > 0; } Console.WriteLine(memberInfo.Name + (isDynamic ? " is dynamic" : " is NOT dynamic!!")); } 

这可能需要一些防御性编码,但它只是一个快速而肮脏的概念certificate。

上述就是C#学习教程:在使用reflection时,如何确定方法是否返回动态类型?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1020297.html

(0)
上一篇 2022年1月5日
下一篇 2022年1月5日

精彩推荐