我正在尋找一種方法將對象轉換爲幾種不同類型的結構之一。我需要結構,因爲我需要它是不可空的。我不知道如何去解決這個問題,但這是我迄今爲止所嘗試的,並且不起作用,因爲: 「對象必須實現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()的任何處罰,因爲這是這將是數據發送給流對象,並且可能會有很多。
爲什麼你需要它是不可空的?在什麼情況下?這似乎很多工作沒有明顯的原因(但我可能是盲人)。 – 2012-07-27 18:12:41
你究竟想在這裏完成什麼?爲什麼你需要對象是不可空的?此外,我不認爲你完全明白你想在這裏做什麼。您不能僅僅將對象轉換爲結構。您需要在類和結構之間定義一個結構和某種形式的轉換,方法或用戶定義的轉換。 – Michael 2012-07-27 18:15:38