簡體   English   中英

我可以在=>運算符之后合並一個方法的多個調用嗎?

[英]Can I combine more than one call to a method after the => operator?

我正在使用此方法來設置和獲取屬性:

bool _selectEnabled;
public bool SelectEnabled
{
   get => _selectEnabled;
   set => SetProperty(ref _selectEnabled, value);
}

和:

protected virtual bool SetProperty<T>(
     ref T backingStore, T value,
     [CallerMemberName]string propertyName = "",
     Action onChanged = null)
{
   if (EqualityComparer<T>.Default.Equals(backingStore, value))
      return false;

      backingStore = value;
      onChanged?.Invoke();
      OnPropertyChanged(propertyName);
      return true;
}

public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = "") 
      => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

這很好用,但是有時候我需要做的不僅僅是設置和獲取。 例如這里:

bool _selectEnabled;
public bool SelectEnabled {
    get { return _selectEnabled; }
    set { if (value != _selectEnabled) {
        _selectEnabled = value;
        OnPropertyChanged("SelectEnabled");
        // I need to call a method after the set. The methods
        // will be different for each property.
        myMethod("ABC", _selectEnabled);
       }
    }
 }

我是否可以像這樣調用另一個方法:

bool _selectEnabled;
public bool SelectEnabled
{
    get => _selectEnabled;
    set => { SetProperty(ref _selectEnabled, value);
                myMethod("ABC", _selectEnabled); }
}

我知道這種方式行不通,但是有辦法嗎?

謝謝

不, 箭頭運算符 (也稱為粗箭頭),用於表示表達式的成員時,用於表達式,可以看作單個語句。 因此,如果要執行兩個語句,則不能使用它們。

就像在C#6之前所做的那樣進行操作:

bool _selectEnabled;
public bool SelectEnabled
{
    get => _selectEnabled;
    set
    { 
        SetProperty(ref _selectEnabled, value);
        myMethod("ABC", _selectEnabled); 
    }
}

是的,有辦法; 但這僅僅是因為您的示例顯示了一些代碼,如果屬性的值已更改(例如,並非無條件調用),則需要調用這些代碼。

您顯示的SetProperty方法聲明具有onChanged參數,該參數是僅在值更改后才調用的Action。 所以你可以這樣寫:

set => SetProperty(ref _selectEnabled, value,
    onChanged: () => myMethod("ABC", _selectEnabled));

您還可以擴展的方法,讓你以同樣的方式提供無條件的代碼; 但是我會說這是一個壞主意(這是一個濕滑的斜坡)。 如果您要無條件執行,請參考Camilo的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM