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

前端之家收集整理的这篇文章主要介绍了C#应该有一个懒惰的关键词前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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的一部分.
>它允许延迟加载成员的值.
>它支持一个lambda表达式或一个方法来提供一个值.

例:

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访问它的值.

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

原文链接:/csharp/94974.html

猜你在找的C#相关文章