[英]Multiple Struct Types in One List
有沒有一種方法,以在使用類的描述方法的列表中的多個結構類型在這里 ?
引用一個告訴從一個抽象類繼承的答案(不可能是結構)或接口我提出了這個:
public interface IMemorable {}
public struct Memorable<type> : IMemorable where type : struct
{
private type Data;
public Memorable<type> (type data)
{
Data = data;
}
}
並以這種方式實現List:
List<Memorable> memorables;
memorables.Add (new Memorable<someStruct> ());
memorables.Add (new Memorable<otherStruct> (new otherStruct (6, "Six")));
哪個應該工作,因為它使用類和Structs確實支持繼承接口我認為?
我收到此錯誤:
Assets/Test.cs(51,22): error CS0305: Using the generic type `Memorable<T>' requires `1' type argument(s)
在列表聲明行中
或者你可以引導我找到更好的解決方案......關於性能,我可能需要存儲數千個這樣的結構。 我不確定,如果這種方法以某種方式工作,繼承自抽象類的類將更適合......
你能給我一些建議嗎?
是的(有一些小的修改),但它沒用:
public interface IMemorable {}
public struct Memorable<T> : IMemorable where T : struct
{
private T Data;
public Memorable(T data)
{
Data = data;
}
}
List<IMemorable> memorables = new List<IMemorable>();
memorables.Add(new Memorable<someStruct>(new someStruct()));
memorables.Add(new Memorable<otherStruct>(new otherStruct(6, "Six")));
(注意,通常類型稱為TSomething
( T
和S
大寫))
因為那時你所擁有的只是一個IMemorable
,你不能用來訪問T Data
。
我將補充一點,一般來說, struct
(和所有的值類型)和接口不能很好地混合,因為將一個struct
為一個接口導致它的裝箱(以及創建一個struct的副本),只需一個異常(這里不相關)
當使用它作為List<>
聲明的類型參數時,錯誤消息告訴您定義類Memorable<T>
的類型參數T
通常,除非您聲明列表包含這些結構的任何常見父類型,否則無法聲明包含多個不同結構類型的列表。 這將是object
, System.ValueType
(所有結構的直接父類)或任何公共聲明的接口。
僅在類型參數方面不同的兩種泛型類型不會自動具有比具有相同父類的任何其他兩種類型更具體的公共類型。 換句話說,具有不同T
的各種Memorable<T>
結構類型沒有比任何其他兩種結構類型更多的派生公共父類型。 任何可以包含它們的列表也將至少包含任何其他結構類型,並且只能以盒裝形式包含 ,即作為引用,而不是值。 (除非你還有其他原因,否則哪種方式會失敗宣稱它們為結構的想法。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.