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