3D測定データの計算を実行するクラスライブラリを使用しています。これにより、次のメソッドが公開されます。
MeasurementResults Calculate(IList<IList<Measurement>> data)
(もちろん、Measurementの)リストのインデックス可能なリストでこのメソッドを呼び出すことを許可したいと思います。たとえば、次の両方です。
Measurement[][] array;
List<List<Measurement>> list;
配列を使用してメソッドを呼び出すと正常に機能しますが、これは少し奇妙です。ここで動作しているコンパイラのトリックはありますか?で電話をかけようとするとList
、おなじみのエラーが発生します。
cannot convert from 'List<List<Measurement>>' to 'IList<IList<Measurement>>'
そこで、引数とメソッドの間で一般的な定義を分割し、必要に応じてIListタイプに変換するメソッドを使用して、ファサードクラス(他のものも含む)を作成しました。
MeasurementResults Calculate<T>(IList<T> data) where T : IList<Measurement>
{
IList<IList<Measurement>> converted = data as IList<IList<Measurement>>;
if(converted == null)
converted = data.Select(o => o as IList<Measurement>).ToList();
return Calculate(converted);
}
これは問題を解決するための良い方法ですか、それともより良いアイデアがありますか?
また、問題のさまざまな解決策をテストしているときに、クラスライブラリメソッドがIEnumerable
の代わりにで宣言されている場合は、配列と:IList
の両方を使用してメソッドを呼び出しても問題ないことがわかりました。List
MeasurementResults Calculate(IEnumerable<IEnumerable<Measurement>> data)
コンパイラのトリックが再び機能しているのではないかと思いますが、なぜ彼らがIList
作業List
中に動作しなかったのでしょうか。