0

たとえば、配列全体のタイプを変更することは可能ですか?

object[] array; 

そして私はしたい:

MyObject[] array;

配列にはMyObject型のアイテムのみが含まれていますが、object []型としてのみ表示できます。この配列をオブジェクトに反映して保存したくない場合は、次のようになります。

class MyArrayObject
{
   public MyObject[] objects {get; set;} 
}

したがって、リフレクションを使用すると---型がないMyArrayObject.GetType().GetProperty("objects").SetValue(array)場合は配列であるため例外が発生します-配列のタイプを変更して、リフレクションを介して目的のプロパティに追加できるようにすることはできますか?object[]MyObject[]

object[]配列を持っていない理由MyObject[]は、新しいアイテムを配列に追加したいので、サイズを変更するかリストに追加する必要があるためです。その後、object[]に変更されます。配列は必ずしもMyObject[]タイプではありません。MyObject2、MyObject3の場合があります。 ..何でも-私もリフレクションで取得します-問題は、型が動的に指定されている配列にアイテムを追加することです。ありがとう!

4

3 に答える 3

2

MyObject[] 配列ではなく object[] を持っている理由は、配列に新しいアイテムを追加したいので、サイズを変更するか、リストに入れる必要があるからです

それが最初に使用する理由のように思えList<MyObject>ます。通常、配列よりもリストを好みます。

常に MyObject[] 型であるとは限りません - MyObject2、MyObject3 ..何でもかまいません

その場合、ジェネリックを使用するのに適した場所のように思えます。リフレクションを本当に使用する必要がある場合は、常にArray.CreateInstance正しい要素タイプで使用できます。

于 2012-07-20T10:00:51.837 に答える
0

直接的な方法があるかどうかはわかりませんが、一種の回避策として、すべてのオブジェクトを反復処理し、それぞれを MyObject にキャストして、キャストしたオブジェクトをコレクションに追加できます。これが最善の解決策ではなく、パフォーマンスもあまり良くないことはわかっていますが、前述したように、これは単なる回避策です。:)

于 2012-07-20T10:02:11.053 に答える
0

LINQ の使用

array.Cast<MyObject>() // cast every element to MyObject

また

array.OfType<MyObject>() // filters all MyObject elements 

次に、配列型を保持する場合は .ToArray() メソッドを呼び出します

一般的にはあまり良くありませんが、理解してサポートする最も簡単な方法

于 2012-07-20T10:21:23.993 に答える