[英]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.