相关疑难解决方法(0)

调试期间的Visual Studio:函数评估需要运行所有线程

调试时我突然遇到一个奇怪的错误.到目前为止,监视窗口中的变量已正确显示.现在我总是在监视窗口中收到错误消息:

功能评估需要运行所有线程

我不能再检查任何变量了.我没有明确地使用线程.我该怎么办才能让它再次运作?

我在某些论坛中已经禁用了调试器的选项窗口中的函数:"启用属性评估和其他隐式函数调用".但没有成功,那我得到错误:

错误隐式函数评估由用户禁用

c# visual-studio-debugging

67
推荐指数
3
解决办法
6万
查看次数

懒惰的财产需要"这个"

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

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

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

private Lazy<IEnumerable<int>> _blocks = 
    new Lazy<IEnumerable<int>>(() => this.CalculateBlocks(0).FirstOrDefault());
Run Code Online (Sandbox Code Playgroud)

...但它没有编译.

关键字"this"在静态属性,静态方法或静态字段初始值设定项中无效

所以我想出了以下内容

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(() => …
Run Code Online (Sandbox Code Playgroud)

.net c# lazy-evaluation

5
推荐指数
2
解决办法
164
查看次数