无法使用对象获取结果

本文关键字:获取 结果 对象 | 更新日期: 2023-09-27 18:02:06

public object My()
{
    List<string> mystring = new List<string>();
    mystring.Add("aaaa");
    mystring.Add("bbb");           
    return mystring;   
}

In Main

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

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

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

无法使用对象获取结果

您需要将对象(测试)强制转换回List<string>,然后遍历List<string>中的所有元素以打印它们。

试试这个:

Program p1 = new Program();
object test= p1.My();
List<string> lst = (List<string>) test;
foreach(string item in lst)
   Console.WriteLine(item);

这个答案适用于不知道List将返回的类型的情况。因此,如果你不知道类型,但是你知道会有某种类型的List返回,并且你想要访问List的功能,你可以将结果强制转换为IList接口,你的程序不会关心List专门化的类型泛型。

Program p1 = new Program();
var test = p1.My();
var lst = (IList) test;
foreach (var item in lst)
    Console.WriteLine(item);

来自WriteLine方法文档(这里)

如果value为null,则只写入行结束符。否则,调用value的ToString方法来生成它的字符串表示,并将结果字符串写入标准输出流。

正如文档所说,List<string>的ToString方法与WriteLine方法一起调用。

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

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

为了打印出列表的内容,你需要将方法的返回类型更改为IEnumerable<string>,例如使用stringJoin方法。看到这个:

  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();
  }