哎。是否有可能有一个方法允许用户传入某种类型的参数并让该方法实例化该类型的新对象?我想做这样的事情:(我不知道仿制药是否可行,但试了一下)
public void LoadData<T>(T, string id, string value) where T : new()
{
this.Item.Add(new T() { ID=id, Val = value});
}
上述方法不起作用,但想法是用户传递他们想要实例化的对象类型,该方法将根据这些参数填写详细信息。
我可以传递一个Enum
参数并执行Switch
并根据它创建新对象,但有更好的方法吗?
感谢
答案 0 :(得分:6)
执行此操作的唯一方法是添加一个界面,该界面还指定要设置的参数:
public interface ISettable
{
string ID { get; set; }
string Val { get; set; }
}
public void LoadData<T>(string id, string value) where T : ISettable, new()
{
this.Item.Add(new T { ID = id, Val = value });
}
不幸的是,我目前无法进行测试验证。
答案 1 :(得分:1)
如果ID
和Val
属性来自公共基类或接口,则可以约束T
继承该类型。
例如:
public void LoadData<T>(string id, string value) where T : IMyInterface, new()
然后,您可以在IMyInterface
个实例上使用T
的所有成员。
如果它们只是具有相同名称的不同类型的不相关属性,则必须使用反射。
此外,您需要从参数列表中删除T,
。
答案 2 :(得分:0)
更动态的类型语言可以轻松完成。我确信它可以用C#,它只需要付出更多的努力。 Theres可能是一些反射库,可以帮助你。
为什么不在调用方法时创建对象?你想要做的事情对我来说似乎过于复杂。