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值,并在整个请求中保持相同的值?
您可以引入一个新的私有字段来存储信息,并且仅在第一次访问时计算值:
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;
}
}