[英]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.