gpt4 book ai didi

c# - 使用具有代码访问安全性的 C# 迭代器方法时出现问题

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

我有一个使用迭代器 block 返回 IEnumerable<T> 的简单方法:

IEnumerable<MyItem> GetItems()
{
foreach (var item in Items)
{
yield return item;
}
}

通常,此方法工作正常,但如果我应用 [SecurityCritical]属性到程序集(或包含上述方法的类),它会抛出一个 TypeLoadException尝试调用该方法时。加载失败的类型是迭代器方法对应的编译器生成的类,它是它的GetEnumerator。导致问题的方法,因为它是安全透明的。

为了比较,如果我修改上面的方法,让它填充并返回一个 List<MyItem> ,一切正常。

有什么建议吗?

谢谢,

蒂姆。

最佳答案

这不是最巧妙的做法,所以希望您能找到更好的方法,但您始终可以放弃编译器生成的代码并创建您自己的实现 IEnumerator<MyItem> 的类。 (也许您自己的类实现 IEnumerable<MyItem> - 根据复杂性,这样做可能会使事情变得更容易或更困难),然后像在 .NET2.0 之前的日子里那样或多或少地构建枚举器。

如果您的实际迭代器 block 的逻辑非常复杂,您可能会发现查看编译器为您创建的类的反射是执行此操作的一个很好的起点,尽管有时生成的代码更复杂(或至少,可读性较差)比起人们自己采取的方法。

必须构建一个 IEnumerator 总是有点令人失望上课时 yield在 99% 的时间里它对我们来说非常好,但仍然有必要的时候,它可能会在这里解决您的问题。

关于c# - 使用具有代码访问安全性的 C# 迭代器方法时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4278007/

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