簡體   English   中英

通用接口和方法問題

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM