C#之Type.GetMethod()方法浅析

本文介绍了如何使用C#的Type.GetMethod()方法动态获取并调用TryParse方法,从而实现从字符串到任意类型转换的优化。通过示例代码展示了在读取INI文件后,如何根据传入的类型自动转换数据,减少手动转换的工作量。同时,解释了GetMethod方法的参数含义及其在代码中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上班划水,下班滑冰。。

 

相信大家很多都写过读取ini文件的代码,最近我常常用到这个地方。而写好的读取iniwen文件的方法返回值是个string类型的。

于是不得不在读取字符串后根据场景来进行与其他值类型的转换,根据逻辑来说hao好像并没有什么问题。但是觉得麻烦的我就在想能不能将该方法ji进一步优化,减少我们的工作量。于是乎,出现了下面的代码:

 

    public static T ReadValue<T>(String section, String key, T defaultValue)
        {
            var t = typeof(T);
            INIApplication iniobj = new INIApplication("./test.ini");

            //从ini读取字符串
            String tmp = iniobj.IniReadValue(section, key);
            MethodInfo tryParse = t.GetMethod("TryParse",//方法名
                                            BindingFlags.Public | BindingFlags.Static | BindingFlags.Default,//筛选条件
                                            Type.DefaultBinder,//绑定
                                            new Type[] { tmp.GetType(), t.MakeByRefType() },//参数类型
                                            new ParameterModifier[] { new ParameterModifier(2) }//参数个数
                                        );

            try
            {
                if (tryParse == null && (!String.IsNullOrWhiteSpace(tmp))) return (T)(tmp as object);

                //参数列表
                var parameters = new object[] { tmp, Activator.CreateInstance(t) };
                return (bool)tryParse.Invoke(null, parameters) ? (T)parameters[1] : defaultValue;
            }
            catch (Exception)
            {

                return defaultValue;
            }            
        }

这里根据我们传入的类型,GetMethod方法会获取当前类型的TryParse方法,读出ini字符串之后可以自动转换成我们想要的类型。其中GetMethod参数的注释是我自己的理解,有什么不对的地方还请指教。官网对参数的解释如下:

 

GetMethod(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])

参数

name

String

包含要获取的方法名称的字符串。

bindingAttr

BindingFlags

一个位屏蔽,由一个或多个指定搜索执行方式的 BindingFlags 组成。

- 或 - 零,以返回 null

binder

Binder

一个对象,该对象定义一组属性并启用绑定,而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。

或 要使用 Nothing 的空引用(在 Visual Basic 中为 DefaultBinder)。

callConvention

CallingConventions

该对象用于指定要使用的一套规则,这些规则涉及自变量的顺序和布局、传递返回值的方式、用于自变量的寄存器和清理堆栈的方式。

types

Type[]

表示此方法要获取的参数的个数、顺序和类型的 Type 对象数组。

- 或 - 空的 Type 对象数组(由 EmptyTypes 字段提供),用来获取不采用参数的方法。

modifiers

ParameterModifier[]

ParameterModifier 对象的数组,表示与 types 数组中的相应元素关联的特性。 仅当通过 COM 互操作进行调用时才使用,而且仅处理通过引用传递的参数。 默认的联编程序不处理此参数。

返回

MethodInfo

表示符合指定要求的方法的对象(如果找到的话);否则为 null

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值