私は関数のリストを作成しようとしていますが、苦労しています。ここに簡略化したバージョンがあります:制限付きTsのFunc <T, string>をその制約付きタイプを使用するコレクションに追加する方法
public class ValueGetter
{
public List<Func<Control, string>> Operations { get; set; }
public ValueGetter()
{
this.Operations = new List<Func<Control, string>>();
}
public void Map<T>(Func<T, string> valueGetter) where T : Control
{
this.Operations.Add(valueGetter);
}
}
この機能をコレクションに追加しようとすると問題が発生します。私はこれを行うことができますが、これはTがコントロールであるために必要ですが、これはコンパイルされません。
このコレクションに機能を追加する方法はありますか?
ありがとうございます、私はFuncが他のタイプのコントロールでは機能しないことを忘れていました。 – Liath
@Liath:本当にここで必要なのは、「Control:T」という制約です。つまり、TはControlまたは任意の基本タイプのコントロールです。それは型安全です。残念ながら、C#はこの種の制約をサポートしていません。あなたがその種の制約を表すことができる言語を探しているなら、Scalaを試してみてください。私は彼らがそれをすることができると思う。 –