我的代码中有很多属性,我必须从资源中获取它们的价值。
private string _labelText;
public string LabelText
{
get
{
if (string.IsNullOrEmpty(_labelText))
_labelText = GetFromResources(Constants.LabelText);
return _labelText;
}
}
如何对此代码进行概括,以便每次都不重复。 最好的是返回不同的类型。
谢谢。
答案 0 :(得分:3)
你可以这样做:
private Dictionary<string, object> _cache = new Dictionary<string, object>();
public string LabelText => Get<string>(Constants.LabelText);
private T Get<T>(string resource)
{
object value;
if (!_cache.TryGetValue(resource, out value))
value = _cache[resource] = GetFromResources(resource);
return (T)value;
}
然后,您可以根据需要创建多个单线程属性。
答案 1 :(得分:1)
一个想法可能是将资源加载的逻辑范围限定为方法:
private static T LoadResource<T>(ref T cache,string name) {
if (string.IsNullOrEmpty(cache)) {
cache = (T) GetFromResources(name);
}
return cache;
}
然后你可以写下你的getters:
private string _labelText;
public string LabelText {
get {
return LoadResource<string>(ref _labelText,Constants.LabelText);
}
}
使用ref
引用一个字段,因此可以在代码的其他部分访问/修改/ ...该字段。