gpt4 book ai didi

c# - 惰性属性需要 "this"

转载 作者:太空狗 更新时间:2023-10-29 22:26:49 24 4
gpt4 key购买 nike

这是我拥有的一个属性示例,编码尽可能简单

private IEnumerable<int> _blocks;
private bool _blocksEvaluated;
public IEnumerable<int> Blocks
{
get
{
if (!_blocksEvaluated)
{
_blocksEvaluated = true;
_blocks = this.CalculateBlocks(0).FirstOrDefault();
}
return _blocks;
}
}

这很冗长;如果可能的话,我想让它更简洁。以下是可以接受的...

private Lazy<IEnumerable<int>> _blocks = 
new Lazy<IEnumerable<int>>(() => this.CalculateBlocks(0).FirstOrDefault());

...但它无法编译。

Keyword 'this' is not valid in a static property, static method, or static field initializer

所以我想到了以下内容

struct MyLazy<TResult>
{
private bool evaluated;
private TResult result;

public TResult Evaluate(Func<TResult> func)
{
if (!evaluated)
{
evaluated = true;
result = func();
}
return result;
}
}

private MyLazy<IEnumerable<int>> _blocks;
public IEnumerable<int> Blocks
{
get { return _blocks.Evaluate(() => this.CalculateBlocks(0).FirstOrDefault()); }
}

我最喜欢哪个,但有更好的方法吗?

注意 - 我意识到可变结构通常是邪恶的,但它们似乎对这个特定问题非常有用。

最佳答案

只需在构造函数中初始化您的字段。

public class MyClass
{
public MyClass()
{
_blocks = new Lazy<IEnumerable<int>>(() => this.CalculateBlocks(0).FirstOrDefault());
}

private readonly Lazy<IEnumerable<int>> _blocks;
}

关于c# - 惰性属性需要 "this",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18062981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com