C#应该有一个懒惰的关键词
发布时间:2020-12-15 06:41:52 所属栏目:百科 来源:网络整理
导读:C#应该有一个懒惰的关键字来使懒惰初始化更容易吗? 例如. public lazy string LazyInitializeString = GetStringFromDatabase(); 代替 private string _backingField; public string LazyInitializeString { get { if (_backingField == null) _backingFiel
C#应该有一个懒惰的关键字来使懒惰初始化更容易吗?
例如. public lazy string LazyInitializeString = GetStringFromDatabase(); 代替 private string _backingField; public string LazyInitializeString { get { if (_backingField == null) _backingField = GetStringFromDatabase(); return _backingField; } } 解决方法
我不知道一个关键字,但它现在有一个
System.Lazy<T> 类型.
>它正式成为.Net Framework 4.0的一部分. 例: public class ClassWithLazyMember { Lazy<String> lazySource; public String LazyValue { get { if (lazySource == null) { lazySource = new Lazy<String>(GetStringFromDatabase); // Same as lazySource = new Lazy<String>(() => "Hello,Lazy World!"); // or lazySource = new Lazy<String>(() => GetStringFromDatabase()); } return lazySource.Value; } } public String GetStringFromDatabase() { return "Hello,Lazy World!"; } } 测试: var obj = new ClassWithLazyMember(); MessageBox.Show(obj.LazyValue); // Calls GetStringFromDatabase() MessageBox.Show(obj.LazyValue); // Does not call GetStringFromDatabase() 在上面的测试代码中,GetStringFromDatabase()只被调用一次.我认为这是你想要的. 编辑: 在收到@dthorpe和@Joe的评论之后,我可以说是以下是最短的: public class ClassWithLazyMember { Lazy<String> lazySource; public String LazyValue { get { return lazySource.Value; } } public ClassWithLazyMember() { lazySource = new Lazy<String>(GetStringFromDatabase); } public String GetStringFromDatabase() { return "Hello,Lazy World!"; } } 因为以下不编译: public Lazy<String> LazyInitializeString = new Lazy<String>(() => { return GetStringFromDatabase(); }); 而该属性是Lazy< String>的类型.不是字符串.你总是需要使用LazyInitializeString.Value访问它的值. 而且,我开放的建议如何缩短. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |