我正在寻找一种将对象转换为几种不同类型的结构之一的方法。我需要结构,因为我需要它不可为空。我不知道该怎么做,但这是我迄今为止尝试过的,但它不起作用,因为:“对象必须实现 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() 的任何处罚感到好奇,因为这是将发送到流对象的数据,并且可能有很多。