gpt4 book ai didi

c# - 在 C# 中是否有一种很好的强类型方法来处理 PropertyChanged 事件?

转载 作者:可可西里 更新时间:2023-11-01 09:02:36 25 4
gpt4 key购买 nike

更改属性名称一定是比较常见的事件,并且期望 Visual Studio 中的重命名功能能够处理所有必要的重命名,INotifyPropertyChanged 的​​ PropertyChanged 事件的属性名称除外。有没有更好的方法以某种方式使其强类型化,这样您就不需要记住手动重命名它?

最佳答案

编辑:nameof 到达了 c# 6。耶!


没有nameof/infoof等;对此进行了很多讨论,但事实就是如此。

有一种方法可以在 .NET 3.5 中使用 lambda 表达式(并解析表达式树),但实际上不值得为此付出代价。现在,我只坚持使用字符串(如果您决心不破坏它,还可以进行单元测试)。


using System;
using System.ComponentModel;
using System.Linq.Expressions;
using System.Reflection;
class Program : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
static void Main() {
var p = new Program();
p.PropertyChanged += (s, a) => Console.WriteLine(a.PropertyName);
p.Name = "abc";
}
protected void OnPropertyChanged<T>(Expression<Func<Program, T>> property) {
MemberExpression me = property.Body as MemberExpression;
if (me == null || me.Expression != property.Parameters[0]
|| me.Member.MemberType != MemberTypes.Property) {
throw new InvalidOperationException(
"Now tell me about the property");
}
var handler = PropertyChanged;
if (handler != null) handler(this,
new PropertyChangedEventArgs(me.Member.Name));
}
string name;
public string Name {
get{return name;}
set {
name = value;
OnPropertyChanged(p=>p.Name);
}
}
}

关于c# - 在 C# 中是否有一种很好的强类型方法来处理 PropertyChanged 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1128091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com