gpt4 book ai didi

c# - "Forcing"符合通用约束

转载 作者:行者123 更新时间:2023-11-30 15:05:30 25 4
gpt4 key购买 nike

我有课,Target<T>无法更改,具有通用约束。我想从没有约束的泛型类中构建该类的实例。下面演示了我想要做的事情的意图,但我意识到这段代码将无法编译并且 typeof(T).IsClass是运行时检查,通用约束是编译时问题。

public class TargetMaker<T>
{
public object GetTarget()
{
if (typeof(T).IsClass)
{
return new Target<T>();
}
return default(T);
}
}

public class Target<T> where T : class
{
public Target() { }
}

谁能想出一种方法,使我可以在 TargetMaker 中实现我想要的功能,而无需向其添加匹配约束,同时将所有逻辑保留在 TargetMaker 类中?

最佳答案

您介意使用反射吗?如果不是:

if (typeof(T).IsClass)
{
Type targetType = typeof(Target<>).MakeGenericType(typeof(T));
return Activator.CreateInstance(targetType);
}
...

如果性能是一个问题,可能有优化它的方法 - 例如通过表达式树构建工厂委托(delegate),并缓存它们。如果性能不是问题,那将会很麻烦:)

关于c# - "Forcing"符合通用约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9044081/

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