是否可以实现以下代码?我知道它不起作用,但我想知道是否有解决方法?
Type k = typeof(double);
List<k> lst = new List<k>();
Run Code Online (Sandbox Code Playgroud) 这是我的问题的抽象和简化:
我有一套玩具和相应的玩具箱.我希望用户能够指定盒子可以容纳的最大类型的玩具:
public class Box<T> {}
Run Code Online (Sandbox Code Playgroud)
然后在Box类中我想要一个通用的玩具列表,但是盒子中包含的每个玩具都有一个通用类型:
public class Box<T>
{
public List<Toy> = new List<Toy>();
public bool Whatever;
[member functions, constructors...]
[The member functions will depend on T]
}
Run Code Online (Sandbox Code Playgroud)
Toys类看起来像这样:
public class Toy<T> where T : struct //T is any type
{
public List<T> = new List<T>();
public string Name;
public string Color;
[member functions, constructors...]
}
Run Code Online (Sandbox Code Playgroud)
我希望能够创建具有许多不同类型的Toys,然后将它们插入到具有其他指定类型的Box中.然后我希望能够一起添加盒子,返回最大类型的盒子.
我真的不知道如何开始.具有多种类型的泛型类的列表实际上是让我循环.我阅读了有关使用抽象类或接口的各种文章,但没有找到一个例子或任何可以完成类似于我正在尝试的事情的东西.
任何人都可以提供任何帮助将非常感激.
解决方案可以在C#4.0中.
可能的未来澄清:
我希望Toy是通用的并且在实例化时接受一个参数,因为Toy还必须有一个List作为成员.
玩具中的嵌套列表是我的主要问题.然后我想要一个包含玩具的Box中的列表,但每个玩具都有不同的类型构造函数.
我把盒子固定在Box上,这是一个错字.
Toy<plastic> tyPlastic = new Toy<plastic>("Name1", Blue, new plastic[] {0xFFEE00, 0xF34684, 0xAA35B2});
Toy<wood> …
Run Code Online (Sandbox Code Playgroud) 我有一个这样的课:
public class Foo<T> : IEquatable<T> where T : struct
{
List<T> lst;
[Other irrelevant member stuff]
}
Run Code Online (Sandbox Code Playgroud)
我想实现IEquatable<T>
Foo类的接口.我需要做什么.为简单起见,我想检查列表成员是否相等.
谢谢.
C#4.0支持的答案是允许的.
更新:这是我目前拥有的:
public bool Equals(Foo<T> foo)
{
return lst.Equals(foo.lst);
}
public override bool Equals(Object obj)
{
if (obj == null) return base.Equals(obj);
if (!(obj is Foo<T>))
{
throw new Exception("The 'obj' argument is not a Foo<T> object.");
}
else
{
return Equals(obj as Foo<T>)
}
}
public override int GetHashCode()
{
return this.lst.GetHashCode();
}
public static bool operator …
Run Code Online (Sandbox Code Playgroud)