C# 创建参数类型的对象

C# 创建参数类型的对象,c#,.net,generics,objectinstantiation,C#,.net,Generics,Objectinstantiation,嘿。有没有可能有一个方法允许用户传入某个类型的参数,并让该方法实例化该类型的新对象?我想做这样的事情:我不知道泛型是否是可行的方法,但尝试一下 public void LoadData<T>(T, string id, string value) where T : new() { this.Item.Add(new T() { ID=id, Val = value}); } 上述方法不起作用,但其思想是用户传递他们想要实例化的对象类型,

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

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

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

    }
上述方法不起作用,但其思想是用户传递他们想要实例化的对象类型,方法将根据这些参数填写详细信息。 我可以只传递一个Enum参数,然后进行切换,并在此基础上创建新对象,但有更好的方法吗? 感谢

如果ID和Val属性来自公共基类或接口,则可以约束T以继承该类型

例如:

public void LoadData<T>(string id, string value) where T : IMyInterface, new()
然后,您可以在T实例上使用IMyInterface的所有成员

如果它们只是不同类型中的不相关属性,并且恰好具有相同的名称,则必须使用反射

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

如果ID和Val属性来自公共基类或接口,则可以约束T以继承该类型

例如:

public void LoadData<T>(string id, string value) where T : IMyInterface, new()
然后,您可以在T实例上使用IMyInterface的所有成员

如果它们只是不同类型中的不相关属性,并且恰好具有相同的名称,则必须使用反射


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

唯一的方法是添加一个接口,该接口还指定要设置的参数:

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

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

唯一的方法是添加一个接口,该接口还指定要设置的参数:

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

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

一种更具动态类型的语言可以轻松地实现这一点。我相信使用C是可能的,这需要更多的努力。这里可能有一些反射库可以帮助您


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

一种更具动态类型的语言可以轻松地完成这项工作。我相信使用C是可能的,这需要更多的努力。这里可能有一些反射库可以帮助您


为什么不在调用方法时创建对象呢?您试图做的事情对我来说似乎太复杂了。

属性是通过接口约定的。@SSL-那么,只要接口还需要setter,您就只需要将该接口添加到约束中。如果使用泛型发布一个小的工作代码,如何调用LoadData会更好。感谢属性与接口签约。@SSL-那么,只要接口还需要setter,您只需要将该接口添加到约束中。如果您使用泛型发布一个小的工作代码,如何调用LoadData会更好。谢谢,C语言中的代码也非常简单。我的申请几乎只有一行。我不知道对象类型是什么,这就是问题所在。但是当你调用方法使其工作时,你必须知道对象类型。现在你使用一个接口,在我看来,你似乎可以去掉泛型,只依赖接口。代码在C中也很简单。我的申请几乎只有一行。我不知道对象类型是什么,这就是问题所在。但是当你调用方法使其工作时,你必须知道对象类型。现在你使用了一个接口,在我看来,你可以去掉泛型,只依赖接口。