无法从用法中推断出方法“ xyz”的类型参数

时间:2018-07-03 18:09:30

标签: c# generics inheritance interface

美好的一天,

我一直在搜索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获取器,如下所示:

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()工作?

谢谢!

1 个答案:

答案 0 :(得分:1)

通用约束对GetId有什么作用?

只需直接使用通用接口类型:

private static TId GetId<TId>(IITem<TId> e)
{
    return e.Id;
}