方法'xyz'的类型参数无法从用法中推断出来



美好的一天,

我一直在谷歌和堆栈溢出中搜索了很长时间,但还没有得到答案。(至少不是我想要的答案:)(

因此,以下是我的底层代码的快速示例:

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

谢谢!

泛型约束对GetId有什么作用?

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

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

最新更新