在不使用额外变量或使用foreach循环</string []>的情况下显示List <string []>的值

时间:2012-05-03 16:31:54

标签: c# arrays string list

我已经陷入疑问,我不知道如何解决它,案例是:

我创建了一个“阵列字符串”列表,如下所示:

List<string[]> definitions;

我已经添加了这样的值:

definitions.Add(new string[2] { "A", "Def.1" });
definitions.Add(new string[2] { "B", "Def.2" });

为了显示值,我这样做:

foreach (string[] theDefinition in definitions)
{
Console.WriteLine(theDefinition[0] + "\tdef: " + theDefinition[1]);
}

到目前为止,这种方法效果很好,但是如何在没有foreach的情况下显示值,我的意思是:

Console.WriteLine(definitions[0] ...)

我应该在3个点中写下什么来显示索引0中列表中的“A”或“Def.1”。

我想通过做类似的事情克服这个问题:

string[] temp = definitions[0]
Console.WriteLine(temp[0] + ", " + temp[1]);

如何使用Console.WriteLine实现它而不使用额外的变量,这可能吗?如何?提前谢谢。

6 个答案:

答案 0 :(得分:4)

Console.WriteLine(definitions[0][0]  + "\tdef: " + definitions[0][1]);

答案 1 :(得分:2)

更好的方法是声明定义类型

public class Definition
{
    public string Name { get; set; }
    public string Value { get; set; }

    public override string ToString()
    {
        return Name + "\tdef: " + Value;   
    }
}

现在您可以像这样简化代码

List<Definition> definitions = new List<Definition> {
    new Definition { Name = "A", Value = "Def.1" },
    new Definition { Name = "B", Value = "Def.2" },
};

foreach (Definition theDefinition in definitions)    
{    
    Console.WriteLine(theDefinition);    
}    

原因你可以使用Nikhil Agrawal提出的流利版本,现在更简单了。

definitions.ForEach(def => Console.WriteLine(def)); 

打印

A   def: Def.1
B   def: Def.2

访问字段比使用数组索引更具描述性

Definition def = definitions[0];
Console.WriteLine(def.Name + ", " + def.Value);

// compared to
// Console.WriteLine(temp[0] + ", " + temp[1]);  

答案 2 :(得分:2)

其他答案当然是正确的,但为什么不使用Dictionary而不是2维字符串数组的List。

        var definitions = new Dictionary<string, string> 
        {
            { "A", "Def.1" },
            { "B", "Def.2" }
        };

        foreach (var keypair in definitions)
        {
            Console.WriteLine("{0} \tdef: {1} ", keypair.Key, keypair.Value);
        }

答案 3 :(得分:1)

您可以这样访问:definitions[definition_index][string_index]

尝试:

Console.WriteLine(definitions[0][0] + "\tdef: " + definitions[0][1]);

答案 4 :(得分:1)

一行代替3行。当LINQ在这里时,不使用For或foreach Loop或Extra Variable

definitions.ForEach(x => Console.WriteLine(x[0] + "\tdef: " + x[1]));

答案 5 :(得分:1)

for (var i = 0; i < definitions.Length; i++)
{
    Console.WriteLine(definitions[i][0] + "\tdef: " + definitions[i][1]);
}