[英]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;
}
}
根據您的用例,由於返回值基於ColumnKey
和AggregateFunction
,您可以實現這兩個屬性的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.