C# 无法使用对象获取结果

C# 无法使用对象获取结果,c#,.net,C#,.net,即使转换为Tolist()我也会得到System.Collection.Generic.List 如何将结果转换为列表并显示所有元素?您需要将对象(测试)转换回List,然后迭代List中的所有元素以打印它们 试试这个: Program p1 = new Program(); object test = p1.My(); Console.WriteLine(test); 程序p1=新程序(); 对象测试=p1.My(); 列表lst=(列表)测试; foreach(lst中的字符串项)

即使转换为
Tolist()
我也会得到
System.Collection.Generic.List


如何将结果转换为列表并显示所有元素?

您需要将对象(测试)转换回
List
,然后迭代
List
中的所有元素以打印它们

试试这个:

 Program p1 = new Program();
 object test = p1.My();
 Console.WriteLine(test);
程序p1=新程序();
对象测试=p1.My();
列表lst=(列表)测试;
foreach(lst中的字符串项)
控制台写入线(项目);

此答案适用于如果您不知道
列表将返回的类型。因此,如果您不知道类型,但您知道将返回某种类型的
List
,并且您希望访问
List
功能,您可以将结果强制转换到
IList
界面,您的程序将不关心哪种类型的generic
List

Program p1 = new Program();
object test= p1.My();

List<string> lst = (List<string>) test;
foreach(string item in lst)
   Console.WriteLine(item);

WriteLine
方法文档()

如果值为null,则只写入行终止符。否则 调用值的ToString方法以生成其字符串 表示,并将结果字符串写入标准 输出流

正如文档所述,
List
的ToString方法是通过
WriteLine
方法调用的

ToString
的默认行为是返回实例类型的字符串表示。()

ToString方法的默认实现返回完整的 对象类型的限定名称,如下例所示 表演

为了打印列表的内容,您需要将方法的返回类型更改为
IEnumerable
,例如,使用
string
Join
方法。见此:

Program p1 = new Program();
var test = p1.My();
var lst = (IList) test;
foreach (var item in lst)
    Console.WriteLine(item);
公共静态IEnumerable My()
{
var mystring=新列表();
mystring.Add(“aaaa”);
mystring.Add(“bbb”);
返回mystring;
}
私有静态void Main(字符串[]args)
{
var test=My();
WriteLine(string.Join(“,”,test.ToArray());
Console.WriteLine(“按任意键继续”);
Console.ReadLine();
}

如果我想动态执行,但不知道返回类型?你的意思是说如果列表类型未知,如何强制转换对象,对吗?@Neo如果你不知道
列表的类型,你可以将其强制转换到
IList
界面。你为什么要返回
对象
?实际上它是一个伪代码,实际上,我的代码是由动态生成的,我正在使用Roslyn执行它,我希望根据大小写返回字符串、列表等。
Program p1 = new Program();
var test = p1.My();
var lst = (IList) test;
foreach (var item in lst)
    Console.WriteLine(item);
  public static IEnumerable<string> My()
  {
      var mystring = new List<string>();
      mystring.Add("aaaa");
      mystring.Add("bbb");
      return mystring;
  }
  private static void Main(string[] args)
  {
      var test = My();
      Console.WriteLine(string.Join(",", test.ToArray()));

      Console.WriteLine("Press any key to continue.");
      Console.ReadLine();
  }