gpt4 book ai didi

c# - 你能在运行时使用 C# 实例化模板类吗

转载 作者:太空狗 更新时间:2023-10-30 00:20:11 28 4
gpt4 key购买 nike

是否可以在运行时实例化一个模板类,例如:

Type type = Type.GetType("iTry.Workflow.Person");
WorkflowPropertyViewModel<type> propViewModel = new WorkflowPropertyViewModel<type>();

这显然行不通。还有其他方法吗?

通用类如下所示:

public class WorkflowPropertyViewModel<T> : IProperty<T>  
{
public Task<T> ValueAsync
{
get;
set;
}

public T Value
{
get;
set;
}

public IQueryable<T> PossibleItems
{
get;
set;
}
}

最佳答案

您可以在给定 Type 对象的情况下创建任何类型的对象:

object o = Activator.CreateInstance(type);

这假设类型有一个默认的构造函数。还有其他用于传递构造函数参数的 Activator 方法:

http://msdn.microsoft.com/en-us/library/wccyzw83.aspx

为了获得特定的泛型类型,您可以在泛型类型定义上调用 MakeGenericType

http://msdn.microsoft.com/en-us/library/system.type.makegenerictype.aspx

所以把它放在一起看起来像这样:

var type = Type.GetType("iTry.Workflow.Person");
var genericType = typeof(WorkflowPropertyViewModel<>).MakeGenericType(type);
var o = Activator.CreateInstance(genericType);

关于c# - 你能在运行时使用 C# 实例化模板类吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13512842/

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