【问题标题】:compiler is printing Strange value in c# [duplicate]编译器在 C# 中打印奇怪的值 [重复]
【发布时间】:2017-02-22 13:46:32
【问题描述】:

我在 c# 中使用方法。我返回了一些东西,但编译器没有打印我所期望的。它正在打印(system.string[])。我不知道为什么请帮忙。

class Program
{
    static void Main(string[] args)
    {
        string[] sub = subjects();
        Console.WriteLine(sub);
    }
    public static string[] subjects()
    {
        Console.WriteLine("Please Enter How many Subject Do you Want to input");
        int limit = System.Convert.ToInt32(Console.ReadLine());
        string[] Subjects = new string[limit];
        for (int i = 0; i < limit; i++)
        {
            Console.WriteLine("Please Enter Subject Name " + i);
            Subjects[i] = Console.ReadLine();
        }
        return Subjects;

    }
}

【问题讨论】:

  • 您实际上看到的是“变量是什么”,而不是它的内容。

标签: c#


【解决方案1】:

Program 打印system.string[] 的原因是因为类string[] 没有override ToString method,所以使用the default one 并且默认ToString 返回类型名称,而不是“值”内部类型。

您可以使用例如String.Join 方法从字符串数组构建一个字符串,并在每个字符串之间放置给定的分隔符:

Console.WriteLine(String.Join(", ", sub));

【讨论】:

    【解决方案2】:
    Console.WriteLine(sub) 
    

    不会显示任何有价值的东西(它会打印子类型),因为您没有引用子数组的任何值,例如 sub[0]。试试这个:

    foreach (string s in sub)
    {
      Console.WriteLine(s);
    }
    

    【讨论】:

      【解决方案3】:
      Console.WriteLine(String.Join(", ", sub));
      

      【讨论】:

      • 来吧,30k+ 你只是在转储一行代码?
      • 看起来是对这个问题的简洁回答。没有错。当 Jon Skeet 给出一个简短的答案时,你会检查所有的答案来责备他吗?
      • @duffymo 关于为什么 OP 看到 system.string[] 打印出来不会出错的一点解释就是我想说的。
      • @duffymo 如果任何人 发布仅代码的答案,或者只是带有“试试这个”评论,我倾向于发表评论,无论代表如何。当高级用户这样做时,这更加令人惊讶。
      • @duffymo 我对提升自己的个人代表不再那么感兴趣了——相反,我宁愿进行高质量的问答,以造福所有人。
      猜你喜欢
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多