如果我有两个yield return具有相同签名的方法,则编译器似乎没有认识到它们是相似的.
我有两种yield return方法:
public static IEnumerable<int> OddNumbers(int N)
{
for (int i = 0; i < N; i++)
if (i % 2 == 1) yield return i;
}
public static IEnumerable<int> EvenNumbers(int N)
{
for (int i = 0; i < N; i++)
if (i % 2 == 0) yield return i;
}
Run Code Online (Sandbox Code Playgroud)
有了这个,我希望以下语句编译好:
Func<int, IEnumerable<int>> generator = 1 == 0 ? EvenNumbers : OddNumbers; // Does not compile
我收到错误消息
无法确定条件表达式的类型,因为"方法组"和"方法组"之间没有隐式转换
但是,一个明确的演员工作:
Func<int, IEnumerable<int>> newGen …
c# compiler-construction yield-return compiler-bug visual-studio-2010-sp1
我知道在C#中,如果你写~MyClass(),这基本上转化为override System.Object.Finalize().因此,无论您是否编写析构函数,CLR中的每个类型都会有一个Finalize()方法(System.Object至少).
1]那么,这是否意味着,默认情况下,每个对象都有一个终结器?
2] CLR决定一个对象应该通过终结队列的基础是什么?
我问这个,因为,我有一个课,说ManagedResourceHolder实施IDisposable,但没有调用GC.SuppressFinalize(this)它的IDisposable.Dispose()方法.该类没有任何非托管资源,并且不需要该~ManagedResourceHolder()方法,这反过来意味着不需要 GC.SuppressFinalize(this)调用,因为没有终结器.
3]在上述场景的上下文中,在实现IDisposable时是否总是需要提供终结器?(即使在没有非托管资源的类上)
该FxCop的规则CA1816是给我一个违反了这一点,我得到的回应在这里,当我问在MSDN上的CA论坛搞糊涂了.
谢谢.
我想知道人们(意味着公司/开发人员)是否真的关心装运组件中存在[SuppressMessage]属性.
在Project文件中创建单独的配置,在Release模式下包含CODE_ANALYSIS,然后在最终版本中将其删除,这对我来说似乎是一种可以避免的开销.
什么是最好的策略,如果一个人不希望这些保留在最终组装但仍想在代码中使用它们?将它们存储在FxCop项目文件中是否有任何优点/缺点?
[我来自VS2008 Pro + FxCop 1.36,而非VS2008 Team System]
讨论IDisposable模式的指南/注释/文章都没有提出应该null在Dispose(bool)方法中设置内部成员(特别是如果它们是内存占用的野兽).
在调试内部基准测试工具时,我逐渐意识到它的重要性.过去常见的是,这个缓冲区内部包含一个大数组.我们过去常常为整个基准程序使用静态缓冲区.一旦我们完成缓冲区,我们就无法释放这个内部数组,也不能让这个缓冲区可释放(因为它是静态的).
所以,我相信,在Dispose()调用之后,类应该尽其所能,以便它释放它正在使用的所有资源并使它们再次可用,即使被处理的对象本身没有被GC收回,也没有设置因此,成员为null,不允许GC收集内部对象意味着Dispose实现并不完美.
你对此有何看法?