オブジェクトをいくつかの異なるタイプの構造体の 1 つに変換する方法を探しています。null 非許容にする必要があるため、構造体が必要です。これについてどうすればよいかわかりませんが、これは私がこれまでに試したことであり、「オブジェクトは IConvertible を実装する必要がある」という理由で機能しません。<- Convert.ChangeType を試す
public class Something
{
private object[] things;
public Something()
{
//I don't know at compile time if this will
//be an array of ThingA's or ThingB's
things = new object[1];
things[0] = new ThingA();
ThingA[] thingsArrayA = GetArrayofThings<ThingA>();
things[0] = new ThingB();
ThingB[] thingsArrayB = GetArrayofThings<ThingB>();
}
public TData[] GetArrayofThings<TData>() where TData : struct
{
return (TData[])Convert.ChangeType(things, typeof(TData[]));
}
}
[Serializable]
public struct ThingA
{
//...
}
[Serializable]
public struct ThingB
{
//...
}
これは、Serg の回答のおかげで機能する実装です。
public TData[] GetArrayofThings<TData>() where TData: struct
{
return things.OfType<TData>().ToArray<TData>();
}
これはストリームオブジェクトに送信されるデータであり、多くの可能性があるため、.ToArray() のペナルティについてはまだ興味があります。