【问题标题】:Can .NET implicitly find out one type parameter from another?.NET 可以隐式地从另一个类型参数中找出一个类型参数吗?
【发布时间】:2014-05-01 17:10:53
【问题描述】:

我们的大部分领域对象都有一个基类:

public class AbstractEntity<TKey>
{
    public virtual TKey ID { get; set; }
}

现在,例如,我有 MobileOperator : AbstractEntity&lt;int&gt; 的课程。

我想做的是为所有 AbstractEntity 后代编写通用相等比较器。我想这样创建它:

var comparer = new AbstractEntityComparer<MobileOperator>();

我声明这个比较器如下:

public class AbstractEntityEqualityComparer<TAbstractEntity, TId> : IEqualityComparer<TAbstractEntity>
    where TAbstractEntity : AbstractEntity<TId>

但是,在这种情况下,我必须明确告诉编译器 TId = int:new AbstractEntityComparer&lt;MobileOperator, int&gt;()。如果我输入 long 而不是 int,它就不会编译。因此,毫无疑问,编译器有办法确定我使用哪种类型来创建 MobileOperator。

那么有没有可能以一种不会让我一直写这个多余的int 的方式来编写比较器?如果是,我该怎么做?

【问题讨论】:

  • 不,这是不可能的。见here

标签: c# .net generics type-parameter


【解决方案1】:

C# 不基于约束进行类型推断,因此您需要显式的泛型构造。有关详细信息,请参阅 Eric Lippert 的 this blog post(以及 cmets 中关于他为什么错错错的争论。)

猜你喜欢
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 2014-06-21
  • 2022-10-24
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多