C#泛型方法,可以推断泛型类型定义中参数的类型吗?

C#泛型方法,可以推断泛型类型定义中参数的类型吗?,第1张

概述有没有办法让以下(不编译)代码运行?我还没有找到解决方案. public class Factory{ public static T Get<T>(V v) where T : BaseClass<V> { T someObject = DIContainer.Resolve<T>(); someObject.Set(v); 有没有办法让以下(不编译)代码运行?我还没有找到解决方案.

public class Factory{    public static T Get<T>(V v)        where T : BaseClass<V> {            T someObject = DIContainer.Resolve<T>();            someObject.Set(v);    }}

T是普通的泛型类型参数,用于定义泛型方法“Get”,但具有包含泛型本身的类型约束.
现在,该方法应该定义一个参数,该类型由方法的泛型类型参数定义的泛型类型参数定义.
BaseClass将定义一个方法Set接收其泛型类型参数类型的参数.
这意味着应该可以调用Factory.Get< A< B>>(someObjectCastableToB);.

它可以通过在V上用另一个约束定义Get as Get方法来工作.但是然后调用将是Factory.Get< A< B>,B>(….)这不是很好,因为B的声明是有两次.

谢谢!

解决方法 与C模板不同,您可以拥有 “template templates”或 “partial specialization”,C#泛型参数只能在声明站点上进行一次深入,而泛型约束只能告诉您有关谱系的信息,仅此而已.如果你想能够引用你的一个泛型参数的泛型参数,那么唯一的方法就是在你的例子中,通过对继承沿袭的通用约束(T:BaseClass< V>),然后还必须在通用签名中标识V.你需要像下面这样的东西.

public class Factory{    public static T Get<T,V>(V v)        where T : BaseClass<V> {            T someObject = DIContainer.Resolve<T>();            someObject.Set(v);    }}

我在这里添加的是方法签名的通用参数V.同样,如果您没有基类来锚定V,那么您将无法对您的情况做很多事情.例如,如果T本身的运行时类型是通用的,而不是它的基类,那么您将陷入困境,如下面的示例所示,这将无法编译.

public class Factory{    public static T Get<T,V>(V v)        where T : T<V> {            T someObject = DIContainer.Resolve<T>();            someObject.Set(v);    }}
总结

以上是内存溢出为你收集整理的C#泛型方法,可以推断泛型类型定义中参数的类型吗?全部内容,希望文章能够帮你解决C#泛型方法,可以推断泛型类型定义中参数的类型吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1233868.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存