|
|
1
5
如果您只需要写入值,那么另一种方法是:
巧合的是,我将在7月份在我的博客上写一系列关于迭代器块上有如此多愚蠢限制的原因。“为什么没有参考参数?”将在本系列的早期介绍。 http://blogs.msdn.com/ericlippert/archive/tags/Iterators/default.aspx |
|
|
2
4
不,我很有信心BCL中没有任何东西可以做到这一点。我认为你的最佳选择正是你所提出的。实施
|
|
|
3
0
我一直认为BCL真的应该有一个类和接口,如下所示: public delegate void ActByRef<T1,T2>(ref T1 p1);
public delegate void ActByRefRef<T1,T2>(ref T1 p1, ref T2 p2);
public interface IReadWriteActUpon<T>
{
T Value {get; set;}
void ActUpon(ActByRef<T> proc);
void ActUpon<TExtraParam>(ActByRefRef<T, TExtraParam> proc,
ref TExtraparam ExtraParam);
}
public sealed class MutableWrapper<T> : IReadWrite<T>
{
public T Value;
public MutableWrapper(T value) { this.Value = value; }
T IReadWriteActUpon<T>.Value {get {return this.Value;} set {this.Value = value;} }
public void ActUpon(ActByRef<T> proc)
{
proc(ref Value);
}
public void ActUpon<TExtraParam>(ActByRefRef<T, TExtraParam> proc,
ref TExtraparam ExtraParam)
{
proc(ref Value, ref ExtraParam);
}
}
尽管许多人本能地在自动属性中包装字段,但字段通常允许编写更干净、更高效的代码,尤其是在使用值类型时。在许多情况下,通过使用属性可以获得的增加的封装在效率和语义上可能是值得的,但是当类型的全部目的是成为状态完全公开和可变的类对象时,这种封装会适得其反。
之所以不包括该界面,是因为
|
|
|
Julia · 矢量中相加为总和S的值的数量 3 年前 |
|
|
apetrai · 我应该如何假设算法使用哪种迭代器类别? 3 年前 |
|
|
Pratik · 不使用Java DeepCopy迭代器 8 年前 |
|
|
PanDe · 将两个列表合并为一个Dict、Tuple 8 年前 |
|
|
bisarch · 迭代哈希集并在每次迭代中删除多个元素 8 年前 |