[英]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.