0

我收到此错误:无法从用法中推断方法“ ConsoleApplication1.Program.takeList<T>( )”的类型参数。System.ComponentModel.BindingList<T>尝试明确指定类型参数。

我相信编译器无法猜测到 chooseList 方法的返回类型,但它必须将它传递给 takeList 方法。有没有办法使这项工作,但不能将 chooseList 方法解耦到 Main 函数中?

class Program
{
    static BindingList<int> listOfInts;
    static BindingList<string> listOfStrings;
    //more lists

    static void takeList<T>(BindingList<T> list)
    {
        //do something
        return;
    }

    static object chooseList() //instead of object i would put BindingList<T>
    {
        int someCondition = 0;

        //code that changes someCondition so compiler doesnt know its value

        switch (someCondition)
        {
            case 1: return listOfInts;

            //more cases for more lists

            default: return listOfStrings;
        }
    }

    static void Main(string[] args)
    {
        Program testClass = new Program();
        var chosenList = chooseList();
        takeList(chosenList);
    }
}

编辑:

这是一个相反的情况,应该有效。我想把它转换成上面的:

class Program
{
    static BindingList<int> listOfInts;
    static BindingList<string> listOfStrings;
    //more lists

    static void takeList<T>(BindingList<T> list)
    {
        //do something
        return;
    }

    static void Main(string[] args)
    {
        Program testClass = new Program();

        int someCondition = 0;

        //code that changes someCondition so compiler doesnt know its value

        switch (someCondition)
        {
            case 1:
                takeList(listOfInts);
                break;

            //more cases for more lists

            default:
                takeList(listOfStrings);
                break;
        }

        //Instead of the switch here, i would like to write takelist(doTheSwitch(someCondition));
    }
}
4

1 回答 1

1

您需要的是BindingList<T>从非泛型抽象类型或接口BindingListIBindingList. 然后,您需要一个TakeList()可以接受非泛型类型的重载。请注意,通用形式可能会隐藏抽象接口中的某些方法,以便例如Add(object)Add(T);隐藏。Contains(object)其他方法可能被重载,因此两者Contains(T)都可以使用[前者将允许人们检查 a 是否List<Cat>包含一个Animal; 即使Animal不是从 派生的Cat,类型的变量 Animal也可以包含对 的实例的引用SiameseCat,这确实]。

于 2013-10-02T21:32:19.520 回答