簡體   English   中英

是否可以在 setter 中將屬性作為 ref 參數傳遞? c#(避免“屬性或索引器不能作為輸出或引用參數傳遞”。)

[英]Is it possible to pass a property as a ref parameter in a setter? c# (avoid “a property or indexer may not be passed as an out or ref parameter”.)

我有這個代碼:

private int _someProperty;
public int SomeProperty
{
    get => _someProperty;
    set => SetProperty(ref _someProperty, value);
}

private void SetProperty<T>(ref T field, T value)
{
    if (!field.Equals(value))
    {
        field = value;
    }
}

我需要SetProperty<T>因為我需要在具有大量屬性的大型 class 中設置邏輯,並且該邏輯適用於所有屬性。 該代碼適用於_someProperty作為變量的情況。 但在我的情況下,它不起作用,因為我引用了嵌套 class 的另一個屬性,所以我收到編譯錯誤:“屬性或索引器可能不會作為 out 或 ref 參數傳遞”。

由於屬性是引擎蓋下的方法,我嘗試了類似的方法:

private setProperty<T>(ref Action<T> property, T value) {
    //meaningful code
}

但無論如何我都會收到編譯錯誤。

有沒有直接的方法通過引用傳遞屬性來以某種方式直接解決這個問題?

不,基本上。

可變的 ref-returning get-only 屬性存在潛在的漏洞,但這可能對您沒有幫助,因為:

  1. 不能在可變的 ref-returning get-only 屬性中設置任何邏輯
  2. 這是一個荒謬的小眾場景,大多數開發人員都不知道存在,並且永遠不需要使用:)

暫無
暫無

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

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