You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# DevExpress中SetProperty方法报CS1615错误:参数1不可用ref关键字

修复Error CS1615:Argument 1 may not be passed with the 'ref' keyword

错误原因

你遇到的CS1615错误,是因为你调用的SetProperty重载第一个参数不支持ref修饰符,但你错误地添加了ref。从你提供的方法签名来看,带ref的SetProperty需要至少3个参数(存储字段、新值、属性标识),但你只传了2个参数,编译器会匹配到另一个不带ref的重载,导致语法冲突。

修复方案

方案1:使用带ref的正确重载(推荐)

带ref的SetProperty重载会自动更新私有字段并触发属性变更通知,需要补充属性的标识参数,有两种写法:

写法一:传递属性表达式

public class MainViewModel : BindableBase
{
    private string _selectedTreeViewItem = null;
    public string SelectedTreeViewItem
    {
        get { return _selectedTreeViewItem; }
        set { SetProperty(ref _selectedTreeViewItem, value, () => SelectedTreeViewItem); }
    }
}

写法二:传递属性名字符串(用nameof避免硬编码)

public class MainViewModel : BindableBase
{
    private string _selectedTreeViewItem = null;
    public string SelectedTreeViewItem
    {
        get { return _selectedTreeViewItem; }
        set { SetProperty(ref _selectedTreeViewItem, value, nameof(SelectedTreeViewItem)); }
    }
}

方案2:使用不带ref的重载(不推荐)

如果你想使用仅传两个参数的重载,需去掉ref修饰符,同时手动更新私有字段:

public class MainViewModel : BindableBase
{
    private string _selectedTreeViewItem = null;
    public string SelectedTreeViewItem
    {
        get { return _selectedTreeViewItem; }
        set 
        { 
            if (_selectedTreeViewItem != value)
            {
                _selectedTreeViewItem = value;
                SetProperty(_selectedTreeViewItem, value);
            }
        }
    }
}

这种方式代码冗余,且容易出现字段更新遗漏的问题,不推荐使用。

内容的提问来源于stack exchange,提问作者abdou93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 20:12:44