【发布时间】:2015-01-07 17:04:30
【问题描述】:
我正在尝试创建如下的泛型类数组,但是,我遇到了麻烦。第一个问题是调用 AddGenericComponent 方法时出现错误“MissingMethodException:未找到 Dog 类型的构造函数”。此方法应将任何放入其中的类添加到组件数组中,并返回刚刚添加的组件,以便以类似于所见“Test()”的方式进行修改。有没有人有关于如何做到这一点的建议或解决方案?
public void Test()
{
MyClass myClass = new MyClass();
Dog dog = myClass.AddGenericComponent<Dog>();
dog.name = "Fluffy";
Console.Writeline(dog.name);
//testing the accessor
dog = myClass.GetGenericComponent<Dog>();
dog.name = "Fluffy mod";
Console.Writeline(dog.name);
}
public class MyClass
{
//must be an array, not list
GenericComponent<Object>[] components = new GenericComponent<Object>[1];
public T AddGenericComponent<T>()
{
GenericComponent<Object>[] newArray = new GenericComponent<Object>[components.Length + 1];
components.CopyTo(newArray, 0);
components = newArray;
components[components.Length - 1] = new GenericComponent<Object>();
return (T)Activator.CreateInstance(typeof(T), new GenericComponent<Object> { });
}
public T GetGenericComponent<T>()
{
return (T)Array.Find(components, c => c.GetType() == typeof(T)).component;
}
}
public class GenericComponent<T> where T: new()
{
public T component;
public GenericComponent()
{
component = new T();
}
}
public class Dog
{
public string name = "";
public Dog(){}
public Dog(string name)
{
this.name = name;
}
}
编辑:
我想我已经解决了。
public T AddGenericComponent<T>()
{
GenericComponent<Object>[] newArray = new GenericComponent<Object>[components.Length + 1];
components.CopyTo(newArray, 0);
components = newArray;
GenericComponent<Object> newComponent = new GenericComponent<Object>();//;(T)Activator.CreateInstance(typeof(T));
newComponent.component = (T)Activator.CreateInstance(typeof(T));
components[components.Length - 1] = newComponent;
return (T)Activator.CreateInstance(typeof(T));
}
【问题讨论】:
标签: c# arrays generics types casting