我正在尝试get; set;在初始化属性时定义值.
我有以下界面
public interface IReportColumn
{
string Title { get; set; }
string ColumnKey { get; }
AggregateFunctions AggregateFunction { get; set; }
string SqlAlias { get; }
}
Run Code Online (Sandbox Code Playgroud)
我需要做的是将属性SqlAlias设置为随机字符串if 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));
}
}
Run Code Online (Sandbox Code Playgroud)
如何根据上述条件仅设置一次SqlAlias值,并在整个请求中保持相同的值?
您可以引入一个新的私有字段来存储信息,并仅在第一次访问时计算该值:
private string _sqlAlias = null;
public string SqlAlias {
get {
if (_sqlAlias == null)
_sqlAlias = this.GetColumnName();
return _sqlAlias;
}
}
Run Code Online (Sandbox Code Playgroud)
根据您的用例,由于返回值基于ColumnKey和AggregateFunction,因此您可以实现这两个属性的setter设置_sqlAlias回null,因此进一步调用SqlAlias将根据其他更新的属性重新计算新值.
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |