相关疑难解决方法(0)

从foreach声明中返回是否有任何副作用?

类似于我使用声明中返回的问题(其答案通常 " 是的,没关系 ")我想知道从foreach语句中返回是否同样没有副作用并被认为是公认的练习,或者当我做这就是我把一个指针挂在中间某个内部的枚举,等等.

这是一个例子:

public string GetCurrentTransaction(string idText)
{
    foreach (var transaction in transactions)
    {
        if (idText.IsEquivalentTo(transaction.IdText))
        {
            return transaction.Content;
        }
    }
    return "";
}
Run Code Online (Sandbox Code Playgroud)

c# foreach

14
推荐指数
2
解决办法
7113
查看次数

IEnumerator:有一个空的Dispose方法是正常的吗?

我正在编写一个IEnumerator<T>类来迭代我正在包装COM集合.我注意到了扩展,所以我需要实现该方法. IEnumerator<T>IDisposableDispose

但是,我想不出我会放在那里的任何东西,因为我只有一个对集合的引用(我不希望它被放在一个结尾处foreach),以及一个int索引.将Dispose方法留空是否正常?

.net ienumerator idisposable

11
推荐指数
1
解决办法
5283
查看次数

什么样的课程会产生回报

所以我注意到这段代码有效:

class Program
{
    public static void Main()
    {
        Int32[ ]numbers = {1,2,3,4,5};

        using (var enumerator = Data().GetEnumerator())
        {

        }
    }

    public static IEnumerable<String> Data()
    {
        yield return "Something";
    }
}
Run Code Online (Sandbox Code Playgroud)

特别是,我对using块感到好奇,因为:

Int32[] numbers = { 1, 2, 3, 4, 5, 6 };

using (var enumerator = numbers.GetEnumerator())
{

}
Run Code Online (Sandbox Code Playgroud)

因编译器错误而失败.显然,yield return返回的类是IDisposable常规数组枚举器不是.所以现在我很好奇:yield return创造了什么?

c#

9
推荐指数
1
解决办法
535
查看次数

如果结构可以实现 IDisposable,为什么它们不能有析构函数?

我阅读了类似问题的已接受答案,部分答案是:

当结构作为参数传递时,它们是按值传递的:它们被复制。现在你有两个具有相同内部字段的结构,它们都将尝试清理同一个对象。一个会首先发生,因此随后使用另一个的代码将开始神秘地失败......然后它自己的清理将失败

同样的问题不也适用于吗Dispose()?如果结构可以实现IDisposable,那么不允许它们具有终结器的原因是什么?

如果终结器的全部目的是Dispose(false)在程序员忘记调用时进行调用Dispose(),并且结构可以具有IDisposable.Dispose(),那么为什么不允许结构的终结器而允许它们用于引用类型呢?

c# destructor idisposable finalizer

5
推荐指数
1
解决办法
1401
查看次数

标签 统计

c# ×3

idisposable ×2

.net ×1

destructor ×1

finalizer ×1

foreach ×1

ienumerator ×1