试图弄清楚如何返回不同的列表类型。
尝试这样的事情,但似乎不起作用:
public Dictionary<string,object> Data;
public List<T> ReturnList(string key){
var type = Data[key].GetType().Name;
switch(type){
case "Bool":
return new List<bool>(); break;
case "Int":
return new List<int>(); break;
case "String":
case default:
return new List<string>(); break;
}
return null;
}
任何人都知道这有可能吗?
注意:我是C#
的新手答案 0 :(得分:2)
您可以返回IList
而不是List<T>
。我重新定义了您的 ReturnList ,现在看起来像这样 -
public IList ReturnList(string key)
{
//var type = Data[key].GetType().Name;
switch (key)
{
case "System.Boolean":
return new List<bool>(); break;
case "System.Int32":
return new List<int>(); break;
case "System.String":
return new List<string>(); break;
}
return null;
}
这里我假设你的字典包含这样的值 -
var dict = new Dictionary<string, object>()
{
{"bool", typeof(bool)},
{"string", typeof(string)},
{"Int", typeof(int)}
};
您可以根据需要修改功能。
我已经在 .Net Fiddle 控制台应用程序中对此进行了测试 -
var type = dict["bool"].ToString();
Program prg = new Program();
var list = prg.ReturnList(type);
Console.WriteLine(list);
答案 1 :(得分:1)
有点奇怪的问题,但我认为这将成为诀窍:
public List<T> ReturnList<T>(string key){
if (Data[key].GetType() != typeof (T))
{
throw new Exception("Invalid data type for key");
}
return new Lit<T>();
}
仍然进行了类型检查,但使用了通用方法的所有好处。
答案 2 :(得分:1)
您不需要在返回语句后写 break ,在默认情况下不需要大小写。 bool类型的名称也是“Boolean”,int实际上是“Int32”。
public static IList ReturnList(string key)
{
var type = Data[key].GetType().Name;
switch(type){
case "Boolean":
return new List<bool>();
case "Int32":
return new List<int>();
case "String":
default:
return new List<string>();
}
return null;
}
示例:
Data = new Dictionary<string, object>();
Data.Add("someBool", true);
Data.Add("someInt", 42);
Data.Add("someString","test");
IList listString = ReturnList("someString");
IList listInt = ReturnList("someInt");
IList listBool = ReturnList("someString");