C#应该有一个懒惰的关键词

前端之家收集整理的这篇文章主要介绍了C#应该有一个懒惰的关键词前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
C#应该有一个懒惰的关键字来使懒惰初始化更容易吗?

例如.

  1. public lazy string LazyInitializeString = GetStringFromDatabase();

代替

  1. private string _backingField;
  2.  
  3. public string LazyInitializeString
  4. {
  5. get
  6. {
  7. if (_backingField == null)
  8. _backingField = GetStringFromDatabase();
  9. return _backingField;
  10. }
  11. }
@H_404_11@解决方法
我不知道一个关键字,但它现在有一个 System.Lazy<T>类型.

>它正式成为.Net Framework 4.0的一部分.
>它允许延迟加载成员的值.
>它支持一个lambda表达式或一个方法来提供一个值.

例:

  1. public class ClassWithLazyMember
  2. {
  3. Lazy<String> lazySource;
  4. public String LazyValue
  5. {
  6. get
  7. {
  8. if (lazySource == null)
  9. {
  10. lazySource = new Lazy<String>(GetStringFromDatabase);
  11. // Same as lazySource = new Lazy<String>(() => "Hello,Lazy World!");
  12. // or lazySource = new Lazy<String>(() => GetStringFromDatabase());
  13. }
  14. return lazySource.Value;
  15. }
  16. }
  17.  
  18. public String GetStringFromDatabase()
  19. {
  20. return "Hello,Lazy World!";
  21. }
  22. }

测试:

  1. var obj = new ClassWithLazyMember();
  2.  
  3. MessageBox.Show(obj.LazyValue); // Calls GetStringFromDatabase()
  4. MessageBox.Show(obj.LazyValue); // Does not call GetStringFromDatabase()

在上面的测试代码中,GetStringFromDatabase()只被调用一次.我认为这是你想要的.

编辑:

在收到@dthorpe和@Joe的评论之后,我可以说是以下是最短的:

  1. public class ClassWithLazyMember
  2. {
  3. Lazy<String> lazySource;
  4. public String LazyValue { get { return lazySource.Value; } }
  5.  
  6. public ClassWithLazyMember()
  7. {
  8. lazySource = new Lazy<String>(GetStringFromDatabase);
  9. }
  10.  
  11. public String GetStringFromDatabase()
  12. {
  13. return "Hello,Lazy World!";
  14. }
  15. }

因为以下不编译:

  1. public Lazy<String> LazyInitializeString = new Lazy<String>(() =>
  2. {
  3. return GetStringFromDatabase();
  4. });

而该属性是Lazy< String>的类型.不是字符串.你总是需要使用LazyInitializeString.Value访问它的值.

而且,我开放的建议如何缩短.

猜你在找的C#相关文章