C# 中具有复杂初始化的静态字符串变量
Static string variable with complex initialization in C#
我有一个带有静态字符串变量的 class,它的初始化有点复杂(我不能将它设置为等于 "whatever"
之类的带引号的字符串)。我需要 运行 几行代码来实际创建值。一旦设置,它的值就不会改变。它目前设置为 属性,只是在第一次调用 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();
}
我有一个带有静态字符串变量的 class,它的初始化有点复杂(我不能将它设置为等于 "whatever"
之类的带引号的字符串)。我需要 运行 几行代码来实际创建值。一旦设置,它的值就不会改变。它目前设置为 属性,只是在第一次调用 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();
}