構造体

構造体をコンテナに入れると、値の変更が面倒くさい。例えば、以下は最後の行でコンパイルエラーになる。

  List<Point> l = new List<Point>();
  l.Add(new Point());
  l[0].X = 1;



NullableみたいなValueRefを使えば、PointをValueRefに変更して、値の変更ができるようになる。

[Serializable]
public sealed class ValueRef<T> where T : struct
{
  public T Value;
  public ValueRef() { }
  public ValueRef(T t)
  {
    Value = t;
  }
  public override string ToString()
  {
    return Value.ToString();
  }
  public override bool Equals(object obj)
  {
    return Value.Equals(obj);
  }
  public override int GetHashCode()
  {
    return Value.GetHashCode();
  }
  public static implicit operator ValueRef<T>(T t)
  {
    return new ValueRef<T>(t);
  }
}