範囲のリストを表すオブジェクトがあります。次のように実装しています。
public class SelectiveOutputRangeCollection<T> : ObservableCollection<SelectiveOutputRange<T>> {
public bool CanAdd() {
return (this.Count < SelectiveOutputWindow.MaxNumberOfRanges);
}
}
public class SelectiveOutputRange<T> : Tuple<T, T> {
public override string ToString() {
return this.Item1 + " to " + this.Item2;
}
}
これはコンパイルされません:
'System.Tuple<T, T>' には、0 引数を取るコンストラクターが含まれていません
単純な引数なしのコンストラクターを追加しても、同じエラーが 2 回表示されます。そして今、私はItem1
とItem2
が正式に読み取り専用であることを思い出しました ( を構築するための好ましい方法は を使用するためTuple
ですTuple.Create<T, T>()
)。
public class SelectiveOutputRange<T> : Tuple<T, T> { // <-- error here
public SelectiveOutputRange() { // <-- error here
this.Item1 = default(T); // <-- field is read only
this.Item2 = default(T); // <-- field is read only
}
public override string ToString() {
return this.Item1 + " to " + this.Item2;
}
}
私は、WPFが引数なしのコンストラクターについてすべてガガであることを知ってObservableCollection
いTuple<T, T>
ます。
Tuple<T, T>
クラスからはあまり必要ありません。T
タイプの 2 つのフィールドをSelectiveOutputRange<T>
クラスに追加するだけで、1 日で済むことはわかっています。
しかし、私の好奇心のためTuple
に、 WPF で sを使用する方法はありますObservableCollection
か? それとも、ここで何か他の奇妙なことが起こっていますか?