c#如何使用get;在未设置值时返回一个值

本文关键字:返回 一个 设置 何使用 get | 更新日期: 2023-09-27 17:54:02

我试图在初始化属性时定义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。但是,由于我在这里生成一个随机字符串,我不希望每次调用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值,并在整个请求中保持相同的值?

c#如何使用get;在未设置值时返回一个值

您可以引入一个新的私有字段来存储信息,并且仅在第一次访问时计算值:

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;
     }
}
相关文章: