[英]Generic interface and methods issue
我目前正在尝试实现通用接口。
public interface IAssociatedTrie<T>
{
bool Contains(string key);
T GetValue(string key);
void Add(string key, T value);
}
我有一个实现此接口的类
class Trie<T> : IAssociatedTrie<T>
{
//some work
public void Add(string key, T value)
{
//some work
}
...
}
然后我想将一个带有IAssociatedTrie接口的类实例传递给某个方法
static void Main(string[] args)
{
Trie<int> myTrie = new Trie<int>();
TestTrie(myTrie);
}
private static void TestTrie<T>(IAssociatedTrie<T> myTrie)
{
//some work
myTrie.Add("oa", 3); //error
//some work
}
但在这里我得到CS1503错误“无法将int转换为T”。 我找到
myTrie.Add("oa", (T)(object)4);
解决问题,但这看起来非常不优雅,我很确定我做错了什么。 如何在没有解析为object-> T的情况下修改方法/类方法?
你的方法是通用的 。 这意味着您的代码必须适用于任何 T
添加3
代码仅适用于T
= int
。 如果我用T
= Elephant
调用你的方法怎么办? 你无法将你的3
投入Elephant
。
我不知道你想要做什么。 使用常量3
是错误的,或者具有通用T
是错误的。 这是你唯一可以决定的事情。 但是您的编译器在标记此错误时是正确的。 您不能将常量3
用作T
的值。
当你说myTrie.Add("oa", 3);
- 我不确定首先使用泛型方法有什么意义。 但是,您希望使用以下内容:
private static void TestTrie<T>(IAssociatedTrie<T> myTrie, T value)
{
myTrie.Add("oa", value);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.