【问题标题】:C# scripting - How to output a dynamically created list of strings?C# 脚本 - 如何输出动态创建的字符串列表?
【发布时间】:2017-07-13 09:56:04
【问题描述】:

我想输出一个列表(C# 脚本),其中包含对象名称的元素。由于这个列表是动态生成的,所以我只在每一行中得到一个输出。这是我的代码:

public static List<string> myList= new List<string>();
//...
public static void myMethod (Renderer[] renderers) {
        foreach (var renderer in renderers) {
            if (IsVisible(renderer)) {
                //print (renderer.name + " is visible!");
                myList.Add (renderer.name);
            }
            print (myList);
        }
        myList.Clear ();
        print ("--");
       }

每一行的输出都类似于System.Collections.Generic.List'1[System.String]。 经过研究,我也尝试了

foreach (var item in myList) {
      print (item);
} 

此方法在一行中打印每个对象。但我希望所有对象的名称都放在一行中,直到打印出“--”。 我怎样才能意识到它?谢谢!

示例:

现在输出:

object0 
object1
object2
etc.

我想要达到的目标:object0, object1, object2, etc.

【问题讨论】:

  • 这是什么印刷品?控制台。写?这个 winforms/console/web 是什么类型的应用程序?
  • print是你写的函数吗?
  • 来自msdn.microsoft.com/fr-fr/library/57a79xd0(v=vs.110).aspx Console.Writeline(string.Join(",", myList.ToArray());
  • @JuanFerrer print 来自using System.Collections.Generic;
  • @Krishna 就像Debug.Log(),我正在 MonoDevelop 中为游戏引擎 Unity3D 开发。

标签: c# list scripting output


【解决方案1】:

您可以使用String.Join 和 LINQ 使用以下代码打印所有可见渲染器的名称

public static void myMethod(Renderer[] renderers)
{
    print(string.Join(",", renderers.Where(IsVisible).Select(r => r.name)));
    print("--");
}

这应该输出:

object1,object2,object3
--

【讨论】:

  • 一个非常聪明的解决方案,谢谢!
  • @Viktoria BTW 你的错误是在print (myList); 循环中调用foreach。您应该在循环之后完成它,当所有项目都已添加时,您可以将其放在之后或将该行更改为 Print(renderer.name);
【解决方案2】:

您可以使用String.Join 方法。它接收分隔符和字符串数组作为参数。例如:

print(String.Join(", ", myList.ToArray());

【讨论】:

  • 这几乎是完美的。但现在我得到了像object0(换行)object0, object1(换行)object0, object1, object2这样的输出......
  • 不要为每个元素执行打印。一旦列表被填满,您需要在循环结束时执行打印
【解决方案3】:

如果你的输出是一个字符串,那么你必须取一个字符串变量并将所有带有“--”的项目连接到变量中。

string temp = string.Empty;
foreach(var item in items)
{
   temp += item + "--";
}

print(temp)

【讨论】:

    【解决方案4】:

    您可以为此使用string.Join

    string itemsInOneLine = string.Join(", ", myList);
    print(itemsInOneLine);
    

    有关更多信息,请查看MSDN string.Join 页面。

    【讨论】:

    • 我使用的是List&lt;string&gt; myList,而不是数组
    • 和 Join 需要一个数组作为第二个参数。
    • string.Joinsupports List&lt;string ;) 看看 MSDN,有一个过载:Join&lt;T&gt;(String, IEnumerable&lt;T&gt;)List&lt;string&gt; 是一个 IEnumerable
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 2015-06-16
    • 1970-01-01
    • 2012-02-15
    • 2017-03-21
    • 2015-01-31
    • 2017-08-23
    相关资源
    最近更新 更多