微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

原文地址:https://www.jb51.cc/csharp/94974.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐