【发布时间】:2018-07-03 18:09:29
【问题描述】:
早安,
我已经在 google 和 stackoverflow 上搜索了一段时间,但还没有得到答案。 (至少不是我想要的答案:))
所以,下面是我的底层代码的一个简单示例:
public interface IITem<IdType>
{
IdType Id { get; set; }
}
public class Item<IdType> : IITem<IdType>
{
public IdType Id { get; set; }
}
public class MyItem : Item<Guid>
{
}
现在,我想创建一个通用的 ID getter,如下所示:
private static TId GetId<TItem, TId>(TItem e) where TItem : IITem<TId>
{
return e.Id;
}
到目前为止还不错,但是现在,当我想像下一个示例一样使用它时,我收到标题中提到的错误:
var item = new MyItem()
{
Id = Guid.NewGuid()
};
var id = GetId(item);
它确实有效,当我明确地说出它的所有类型时:
var id = GetId<MyItem, Guid>(item);
但我不想命名我的项目,更不用说 ID 类型(在 MyItem 中定义,在 GetId() 使用范围内无法直接看到),这对于某些对象可能完全不同。
我是否可以进行任何类型的语法修复,以便在不提示任何类型的情况下让这个 GetId() 正常工作?
谢谢!
【问题讨论】:
标签: c# generics inheritance interface