标签:c static-variables lazy-initialization
我有一个带有静态字符串变量的类,它具有一些复杂的初始化(我不能将它设置为等于引用的字符串,如“what”).我需要运行几行代码来实际创建值.一旦设置,其值将不会改变.它目前设置为一个属性,只在第一次调用get时设置.
class MyClass
{
private static string _myString = "";
public static string MyString
{
get
{
if(_myString == "")
{
// use an object "obj" here to create the value
MyObject obj = new MyObject();
obj.someSetupHere();
_myString = obj.ToString();
}
return _myString;
}
}
}
我的问题是:有更好的方法吗?我希望在设置所有其他变量时设置值,而不是在值的第一个“get”上设置.我应该使用Lazy< T>在这里呢?我真的很喜欢这样的东西:
private static string _myString =
{
// use an object "obj" here to create the value
MyObject obj = new MyObject();
obj.someSetupHere();
_myString = obj.ToString();
}
我知道这可能不是有效的语法,但希望它传达了我正在尝试做的事情.
解决方法:
你可以调用一个方法:
private static readonly string _myString = GetMyStringValue();
private static string GetMyStringValue()
{
MyObject obj = new MyObject();
obj.someSetupHere();
return obj.ToString();
}
你可以使用一个lambda表达式强制转换为Func< string>如果你真的想避免额外声明的方法:
private static readonly string _myString = ((Func<string>) () =>
{
MyObject obj = new MyObject();
obj.someSetupHere();
return obj.ToString();
}).Invoke();
或者使用静态构造函数初始化字符串:
private static readonly string _myString;
static MyClass()
{
MyObject obj = new MyObject();
obj.someSetupHere();
_myString = obj.ToString();
}
标签:c,static-variables,lazy-initialization 来源: https://codeday.me/bug/20190609/1204307.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。