我目前正在尝试实现通用接口。
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-&gt; T?
的情况下修改方法/类方法答案 0 :(得分:2)
您的方法是通用。这意味着您的代码必须适用于任何 T
。
添加3
的代码仅适用于T
= int
的 。如果我使用T
= Elephant
调用您的方法,该怎么办?您无法将3
投射到Elephant
。
我不知道你想要做什么。使用常量3
是错误的,或者使用通用T
是错误的。这是你唯一可以决定的事情。但是您的编译器在标记此错误时是正确的。您不能将常量3
用作T
的值。
答案 1 :(得分:1)
当你说myTrie.Add("oa", 3);
时 - 我不确定首先使用泛型方法有什么意义。但是,看起来你打算使用类似的东西:
private static void TestTrie<T>(IAssociatedTrie<T> myTrie, T value)
{
myTrie.Add("oa", value);
}