gpt4 book ai didi

c# - 在没有新约束的情况下创建 T 的新实例

转载 作者:可可西里 更新时间:2023-11-01 08:17:20 26 4
gpt4 key购买 nike

如果要创建泛型的新实例,new constraint需要定义,像这样:

public T SomeMethod<T>() where T : new()
{
return new T();
}

是否可以使用反射创建一个没有新约束的 T 实例,就像这样(包含伪代码):

public T SomeMethod<T>()
{
if (T has a default constructor)
{
return a new instance of T;
}
else
{
return Factory<T>.CreateNew();
}
}

最佳答案

使用 Activator.CreateInstance()为了这。参见 http://msdn.microsoft.com/en-us/library/system.activator.createinstance.aspx有关如何使用此方法的更多信息。基本上,您要做的是:

var obj = (T)Activator.CreateInstance(typeof(T));

您可以使用 GetConstructors() 来验证它是否具有默认构造函数方法:

var constructors = typeof(T).GetConstructors();

如果您发现一个参数为零的构造函数,您可以使用 Activator.CreateInstance方法。否则,您使用 Factory<T>.CreateNew()方法。

编辑:

要直接找出是否存在不带任何参数的构造函数,可以使用以下检查:

if (typeof(T).GetConstructor(Type.EmptyTypes) != null)
{
// ...

关于c# - 在没有新约束的情况下创建 T 的新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17313234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com