gpt4 book ai didi

c# - 为什么我不能访问 DelegateCommand 的执行委托(delegate)中的实例属性?

转载 作者:行者123 更新时间:2023-11-30 19:54:47 26 4
gpt4 key购买 nike

我习惯于以显然不同于此的方式使用 lambda。当我尝试定义 DelegateCommand 时,我必须访问该命令的封闭类型的非静态成员。例如:

public ICommand ShowViewCommand { get; set; } = new DelegateCommand<string>(v =>
{
var viewModel = new EditFormViewModel;
var ucType = Assembly.GetExecutingAssembly().GetType(v);
App.SetWindowView(viewModel, ucType);
},
v => true);

在上面的代码中,在 App.SetWindowView 调用中,App 有一个红色的波浪下划线,悬停在它上面时,我被告知:

Cannot access non-static property App in static context.

这不是我在将 lambda 用于闭包时习惯的行为。这里有什么不同?

最佳答案

您正在尝试访问自动实现的属性初始值设定项中的实例成员。这就像在字段初始值设定项中尝试这样做。基本上,您不能在初始化器中隐式引用 this,甚至不能在 lambda 表达式中引用。相反,您需要在构造函数中执行此操作:

public ICommand ShowViewCommand { get; set; }

public Foo() // Replace with your class name
{
ShowViewCommand = v => new DelegateCommand<string>(v =>
{
var viewModel = new EditFormViewModel;
var ucType = Assembly.GetExecutingAssembly().GetType(v);
App.SetWindowView(viewModel, ucType);
});
}

关于c# - 为什么我不能访问 DelegateCommand 的执行委托(delegate)中的实例属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40715673/

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