获取C#对象中调用属性的属性名

本文详细介绍了在WindowsPhone程序开发过程中,如何利用MVVM模式进行深入开发,特别关注了如何简化属性名称变更带来的困扰,并通过实例展示了如何使用表达式树获取属性名称,同时提供了通用的代码实现,确保不论属性类型如何变化都能有效获取其名称。此外,还对比了MVVMLight中获取属性名称的灵活性,提升了开发效率。

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

       学习Windows Phone程序开发已经很长时间,对于MVVM也算比较熟悉了。最近自己打算写一写MVVM深入一点的东西,顺利的实现了Model和ViewModel注册的代码。回头一用,突然看到我要通知界面属性的改变是要通过封装PropertyChanged事件中传入字符串的属性名称。这样每个属性修改,我就得修改我的属性名字符串,这样岂不是很不方便?但在MVVM Light中,可以通过在表达式树中传入要使用的属性名的属性调用即可,不由大为震动。

       后来多方查证,以下代码可以实现获取一个属性的属性名称字符串:      

        public string GetPropertyName(Expression<Func<Test, int>> expr)
        {
            return ((MemberExpression)expr.Body).Member.Name;
        }

        假设需要获取的属性的名称是Age,可以通过如下方式获取到Age的字符串名称即“Age”:

        Console.WriteLine(GetPropertyName(o => o.Age));

        这里的o是表达式中的对象。这句代码会输出字符串“Age”到控制台上面。

        但是如果属性的数据类型不是int类型,使用上面的GetPropertyName方法就不灵光了。亏得在写Model和ViewModel的注册模块代码时已经仔细研究过泛型,正好在这里也用上,于是最终完整版本的方法出现在了下面:

        public string GetPropertyName<T>(Expression<Func<Test, T>> expr)
        {
            return ((MemberExpression)expr.Body).Member.Name;
        }

        这样不论属性的返回类型是什么,都可以获取到属性的字符串名称了。


  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值