繁体   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