可以使用params通过使用yield的函数通过ref传递变量

时间:2010-07-05 01:55:22

标签: c# yield params

如果我有一个具有params参数的方法,可以通过引用传递它,并在每次调用yield时更新。

这样的事情:

public static void GetRowsIter(ref params valuesToUpdate)
{

    foreach(row in rows)
    {
       foreach(param in valuesToUpdate
       {
          GetValueForParam(param)
       }
       yield;
    }
}

这合法吗? (我离开了我的编译器,或者我只是尝试一下。)

1 个答案:

答案 0 :(得分:6)

没有。 params只创建一个包含要传递的参数的数组。与所有其他数组一样,此数组只是变量的集合,并且无法声明ref变量或数组类型。因此,只有实际的显式参数可以作为refout传递。

话虽如此,如果类型是引用类型,那么它将像往常一样展示引用类型语义,这意味着对对象进行的任何更改都将反映在所有可访问该对象的代码中参考。只有对实际变量的分配才会被反映出来。

但是,我不确定您的代码究竟要做什么。 yield语句必须后跟return语句和值或break语句,后者结束迭代器。