3

Car オブジェクトの配列があります

それらを Vehicle オブジェクトのリストに変換したい

私はこれがうまくいくと思った

Vehicle[] vehicles = cars.ConvertAll(car=> ConvertToVehicle(car)).ToArray();

しかし、ConvertAll には 2 つのパラメーターが必要であると不平を言っています。

エラーは次のとおりです。

エラー 2 ジェネリック メソッド 'System.Array.ConvertAll(TInput[], System.Converter)' を使用するには、'2' 型引数が必要です C:\svncheckout\latestTrunk\Utility\test.cs 229 33

ここで間違った方法を使用していますか?

4

4 に答える 4

4

実際に 2 つの型パラメーターを必要とする車のリスト (List) の代わりに、車の配列(Car[]) でConvertAll を使用しています1。cars がリストの場合、コードは機能します。

于 2010-06-28T03:04:14.097 に答える
1

Array.ConvertAll拡張メソッドのようなものより前のものですが、期待される動作はまさにどのように機能するかSelectです:

Vehicle[] vehicles = cars.Select(car=> ConvertToVehicle(car)).ToArray();

Vehicle[] vehicles = Array.ConvertAll(cars, car=> ConvertToVehicle(car));

違い:

  • Enumerable.Select、静的ですが、拡張メソッドであるため、インスタンスメソッドのように見えます
  • Array.ConvertAll静的ですが、拡張メソッドではありません
  • Enumerable.Selectを返すので、配列を取得するIEnumerable<T>必要がありますEnumerable.ToArray
  • Array.ConvertAllすでに配列を返し、さらに、それが適切なサイズであることをより効率的に保証しEnumerable.ToArrayます
于 2010-06-28T05:20:14.197 に答える
1

これは、拡張メソッドが導入される前に作成された静的関数であるため、メソッドのように呼び出すことはできません。

正しい構文:

Array.ConvertAll<Vehicle>(cars, car=> ConvertToVehicle(car))
于 2010-06-28T03:12:42.690 に答える
0

Car が Vehicle Super Type の Sub Type である場合は、次の操作を実行できます。ConvertToVehicle が Vehicle タイプを返す場合も同様に機能します。

class Vehicle { }
class Car : Vehicle { }

class Program
{
    static List<Car> ll = new List<Car>();
    static void Main(string[] args)
    {
       Vehicle[] v = ll.ConvertAll<Vehicle>(x => (Vehicle)x).ToArray();
    }
}
于 2010-06-28T02:56:03.600 に答える