簡體   English   中英

c#如何使用get;如果未設置該值,則返回一個值?

[英]c# how to use get; to return a value if the value was not set?

我試圖定義get; set; get; set; 初始化屬性時的值。

我有以下界面

public interface IReportColumn
{
    string Title { get; set; }

    string ColumnKey { get; }

    AggregateFunctions AggregateFunction { get; set; }

    string SqlAlias { get;  }

}

我需要做的是將屬性SqlAlias設置為隨機字符串,如果AggregateFunction == AggregateFunctions.None || ColumnKey == null AggregateFunction == AggregateFunctions.None || ColumnKey == null 但是,因為我在這里生成一個隨機字符串,所以我不希望它改變我調用get方法的時間。 我希望能夠獲得它,設置它並在整個請求中重用相同的值。

這就是我實現界面的方式

public class ReportColumnMsSqlServer : IReportColumn
{

    public string Title { get; set; }

    public string ColumnKey { get; set; }

    public AggregateFunctions AggregateFunction { get; set; }

    public string SqlAlias {

        get {

           return this.GetColumnName();

        } 
    }


    private string GetColumnName()
    {
        string columName = this.ColumnKey;

        if (columName == null || this.AggregateFunction != AggregateFunctions.None)
        {
            columName = Convert.ToBase64String(Guid.NewGuid().ToByteArray());
        }

        return string.Format("{0}", new Regex("[^a-zA-Z0-9]").Replace(columName, string.Empty));
    }

}

如何根據上述條件僅設置一次SqlAlias值,並在整個請求中保持相同的值?

您可以引入一個新的私有字段來存儲信息,並僅在第一次訪問時計算該值:

private string _sqlAlias = null;
public string SqlAlias {

    get {
       if (_sqlAlias == null)
           _sqlAlias = this.GetColumnName();
       return _sqlAlias;

    } 
}

根據您的用例,由於返回值基於ColumnKeyAggregateFunction ,您可以實現這兩個屬性的setter以將_sqlAlias設置回null ,因此對SqlAlias進一步調用將重新計算新值,基於其他更新的屬性。

使用簡單的“延遲加載”模式。

private string _sqlAlias;
public string SqlAlias {
     get {
         if (_sqlAlias == null) {
             _sqlAlias = GetColumnName();
         }

         return _sqlAlias;
     }
}

暫無
暫無

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

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