我有一个要求,我可以在一个对象中获得以下内容 -
a type T or List
将对象转换为T很容易.如何将其转换为List(通过首先检查它是否可以成功转换),我想要转换的原因是滚动列表并在每个元素上调用tostring.
我的实际代码 -
namespace Generic_Collection_Code { class Program { public static string DumpObj(object obj) { string sTemp = String.Empty; Listints = obj as List ; if (ints != null) { foreach (int i in ints) sTemp += i.ToString() + ","; sTemp.Trim(','); } else { List strings = obj as List ; if (strings != null) { foreach (string s in strings) sTemp += s + ","; sTemp.Trim(','); } else { sTemp += obj.ToString(); } } return sTemp; } static void Main(string[] args) { List listInts = new List (); listInts.Add(1); listInts.Add(2); listInts.Add(3); Console.WriteLine("Object1: {0}", DumpObj(listInts)); int i = 90; Console.WriteLine("Object2 {0}", DumpObj(i)); List listStrings = new List (); listStrings.Add("1"); listStrings.Add("2"); listStrings.Add("3"); Console.WriteLine("Object3: {0}", DumpObj(listStrings)); Console.ReadKey(); } } }
上面的代码有效,但我知道这是一种难以实现的方法.我想从社区问我怎么能有这样的功能 -
public static string DumpObj(object obj) { string sTemp = String.Empty; List list = obj as List ; if (list != null) { foreach (T i in list) sTemp += i.ToString() + ","; sTemp.Trim(','); } return sTemp; }
这给了我编译错误,因为我必须在调用DumpObj时指定T,错误为 -
错误1无法从用法中推断出方法'Generic_Collection_Code.Program.DumpObj(object)'的类型参数.尝试显式指定类型参数.D:\ DotNet\Generic_Collection_Code\Generic_Collection_Code\Program.cs 57 47 Generic_Collection_Code
正如你所看到的,obj是一个对象,我在调用dumobj时不知道它的类型.
我希望我已经明确表达了这一点.
我感谢你的时间!
关心阿米特
说
ListgenericList = object as List ; if(genericList != null) { // Do the loop }
"as"关键字验证"对象"实际上是"is-a"List
你得到的编译错误是什么?如果在上下文中将T声明为泛型类型参数,那么我可以在该语句中看到的唯一编译时问题是使用关键字object
作为变量名.无论如何,我建议这样做最能表达你的意图:
IEnumerable enumerable = obj as IEnumerable; if (enumerable != null) { foreach (object item in enumerable) { sTemp += item.ToString(); } }
如果您的列表可能包含大量项目,您可能还需要考虑使用StringBuilder.