【发布时间】:2018-08-24 13:39:50
【问题描述】:
我想做的事情看起来很简单——我想在ICollection<T> 中找到一个满足给定谓词的元素并将其替换为另一个。在 C++ 中,我会这样写:
for(auto &element : collection) {
if(predicate(elem)) {
element = newElement;
}
}
通过引用抓取元素并重新分配它。然而做
foreach(ref var element in collection)
在 C# 中无法编译,我不确定如果它编译了它是否会做我想做的事。如何访问集合中的物理引用来修改它?
如果有帮助,我的方法签名:
public static void ReplaceReference<T>(
ICollection<T> collection,
T newReference,
Func<T, bool> predicate)
编辑:
由于看起来不清楚,我不能只使用ICollection<T> 并将其更改为其他内容。我收到了ICollection - 这就是我所知道的,我无法改变它。无论我多么希望成为IList 或IEasilyReplacable,我都无法影响它。
【问题讨论】:
-
我删除了 C++,因为这与编写 C++ 代码没有任何关系
-
当您使用
foreach迭代集合时,您不能修改引用本身。但是,您可以修改引用项的成员。
标签: c# .net collections