我得到这个错误: 方法'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));
}
}
selectedList对象类型不是类型BindingList – aqwert
你在做什么天生没有任何意义。方法的返回类型必须在* compile-time *处知道,泛型只是让您表达更高阶的类型约束。 'chooseList()'唯一明智的事情是'IEnumerable
你可以做的最接近的是让'chooseList'返回一个基于类型参数的列表(例如,使它成为'public BindingList ChooseList ()'),但是你不能摆脱在编译时指定你想要的类型,时间。 –
millimoose