1

嘿。是否有可能有一种方法允许用户传入某种类型的参数并让该方法实例化该类型的新对象?我想做这样的事情:(我不知道泛型是否可行,但试了一下)

    public void LoadData<T>(T, string id, string value) where T : new()
    {

        this.Item.Add(new T() { ID=id, Val = value});

    }

上面的方法不起作用,但想法是用户传递他们想要实例化的对象类型,该方法将根据这些参数填写详细信息。我可以只传递一个Enum参数并Switch根据它创建新对象,但有更好的方法吗?谢谢

4

3 回答 3

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 });
}

不幸的是,我目前无法测试验证。

于 2010-09-29T18:06:57.103 回答
1

如果IDVal属性来自公共基类或接口,您可以约束T继承该类型。

例如:

public void LoadData<T>(string id, string value) where T : IMyInterface, new()

IMyInterface然后,您可以使用onT实例的所有成员。

如果它们只是碰巧具有相同名称的不同类型的不相关属性,则必须使用反射。

此外,您需要T,从参数列表中删除。

于 2010-09-29T18:06:55.917 回答
0

更动态类型的语言可以轻松做到这一点。我确信它可以使用 C#,只是需要更多的努力。可能有一些反射库可以在这里为您提供帮助。

为什么在调用方法时不直接创建对象?你试图做的事情对我来说似乎过于复杂。

于 2010-09-29T18:19:48.247 回答