gpt4 book ai didi

c# - 通用接口(interface)在 C# 中不起作用的问题

转载 作者:行者123 更新时间:2023-12-02 05:55:44 28 4
gpt4 key购买 nike

我有一个界面:

interface IKey<TId, TName>
where TId: IEquatable<TId>
where TName: IEquatable<TName>
{
TId Id { get; set; }
TName Name { get; set; }
}

然后我像这样实现 IKey:

class Item : IKey<int, string>
{
int Id { get; set; }
string Name { get; set; }
//...
}

我有适合这些项目的收藏

class ItemCollection<T>
where T : IKey<TId, TName> //Any type that implements IEquatable<...>
where TId: IEquatable<TId>
where TName: IEquatable<TName>
{
//...
}

问题是它不起作用。有什么办法可以正确地做到这一点吗?

还有另一种没有 IEquatable 的实现,使用IKey<out TId, out TName>IKey<object, object>但它不适用于值类型并使用 Object.Equals .

最佳答案

问题是您尝试在 ItemCollection 中使用 TIdTName 而不定义它们。因为它们是 T 上接口(interface)约束的一部分,所以它们需要将具体类型指定为类型参数。

class ItemCollection<T, TId, TName>
where T : IKey<TId, TName>
where TId : IEquatable<TId>
where TName : IEquatable<TName>
{
//...
}

使用硬编码类型的示例

class ItemCollection<T>
where T : IKey<string, string>
{
//...
}

关于c# - 通用接口(interface)在 C# 中不起作用的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9553090/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com