使用泛型函数创建可重用的通用查找属性

时间:2017-02-22 22:09:04

标签: c# generics delegates

我发现自己经常写这样的东西,其中foo是数据密集型操作,可能会或可能不会被调用。

    private bool? _UseCapitalAssets;
    public bool UseCapitalAssets
    {
        get
        {
            if (_UseCapitalAssets == null)
            {
                return foo();
            }
            else
            {
                return _UseCapitalAssets.Value;
            }
        }
    }

这样做只允许我在需要时重新使用数据。我怎样才能把它变成更通用的东西?

我想写一些类似的东西:

public class Lazy<T>
{
    private T _value;
    private bool lazySet = false;
    private Func<T> _method;


    public Lazy(Func<T> method)
    {
        _method = method;
    }

    public T Value
    {
        get
        {
            if (lazySet == false)
            {
                _value = _method();
                lazySet = true;
            }
            return _value;
        }
    }
}

编译,但是当我尝试使用它时:

public Lazy<bool> UserLazy = new Lazy<bool>(fooMethod);

我收到编译错误:&#34;无法访问非静态方法&#39; fooMethod&#39;在非静态环境中#34;

到底有没有?

0 个答案:

没有答案