개체를 여러 가지 유형의 구조체 중 하나로 변환 할 방법을 찾고 있습니다. 나는 nullable이 아니기 때문에 구조체가 필요하다. 이 문제를 해결하는 방법을 모르겠지만 지금까지 시도한 이유는 다음과 같습니다. "개체가 IConvertible을 구현해야합니다." < - Convert.ChangeType개체를 generics로 struct로 변환하십시오.
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()에 대한 처벌에 대해 궁금 해요 스트림 개체로 보내면 많은 것들이있을 수 있습니다.
왜 Null을 허용하지 않아야합니까? 어떤 맥락에서? 이것은 분명한 이유가없는 많은 작업처럼 보입니다 (그러나 나는 장님이 될 수 있습니다). –
정확히 여기에서 달성하려는 것은 무엇입니까? 왜 nullable이 아닌 객체가 필요합니까? 게다가, 당신이 여기에서하려는 것을 완전히 이해했다고는 생각하지 않습니다. 즉석에서 개체를 구조체로 변환 할 수는 없습니다. 당신은 당신의 클래스와 구조체 사이의 어떤 형식의 변환이나 구조체를 정의 할 필요가있다. – Michael