c# - 无法从用法中推断方法 'xyz' 的类型参数

标签 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 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 上的作用是什么?

直接使用泛型接口(interface)类型即可:

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

关于c# - 无法从用法中推断方法 'xyz' 的类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51160668/

相关文章:

c# - 错误 - 不允许连接字符串名称属性

java - 单个泛型参数同时接受两种不同类型

java - 接受多个谓词作为方法的参数

spring - Jaxb 编码器和泛型(2)

c++ - 为什么我的程序输出一个巨大的小数?

c# - 对值在数据库中存储为 int 的枚举列进行排序

c# - NCalc 日期操作

c# - 实现抽象方法时更改参数类型

java - 避免在不同上下文中多次实现同一方法

c# - C# 中的多维数组列表或列表?