gpt4 book ai didi

c# - 带有代码契约的迭代器中的错误?

转载 作者:太空狗 更新时间:2023-10-29 20:38:04 24 4
gpt4 key购买 nike

以下代码在前提条件下失败。这是代码合约中的错误吗?

static class Program
{
static void Main()
{
foreach (var s in Test(3))
{
Console.WriteLine(s);
}
}

static IEnumerable<int>Test (int i)
{
Contract.Requires(i > 0);
for (int j = 0; j < i; j++)
yield return j;
}
}

最佳答案

我的猜测是这与迭代器的延迟特性有关。请记住,契约(Contract)处理将发生在最终发出的 IL 上,而不是 C# 代码上。这意味着您必须考虑为迭代器和 lambda 表达式等功能生成的代码。

如果您反编译该代码,您会发现“i”实际上并不是一个参数。它将是用于实现迭代器的类中的一个变量。所以代码实际上看起来更像下面的

class IteratorImpl {
private int i;
public bool MoveNext() {
Contract.Require(i >0);
..
}
}

我对合约 API 不是很熟悉,但我猜生成的代码更难验证。

关于c# - 带有代码契约的迭代器中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1072184/

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