2

我陷入了一个疑问,我不知道如何解决它,案例是:

我创建了一个这样的“数组字符串”列表:

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 来实现它,这可能吗?如何?先感谢您。

4

6 回答 6

4
Console.WriteLine(definitions[0][0]  + "\tdef: " + definitions[0][1]);
于 2012-05-03T16:33:56.270 回答
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)); 

印刷

定义:Def.1
B定义:Def.2

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

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

// compared to
// Console.WriteLine(temp[0] + ", " + temp[1]);  
于 2012-05-03T16:44:34.613 回答
2

其他答案当然是正确的,但为什么不只使用字典而不是二维字符串数组的列表。

        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);
        }
于 2012-05-03T16:45:13.627 回答
1

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

尝试:

Console.WriteLine(definitions[0][0] + "\tdef: " + definitions[0][1]);
于 2012-05-03T16:35:18.577 回答
1
for (var i = 0; i < definitions.Length; i++)
{
    Console.WriteLine(definitions[i][0] + "\tdef: " + definitions[i][1]);
}
于 2012-05-03T16:40:55.060 回答
1

一行答案而不是 3 行。当 LINQ 在这里时,不使用 For 或 foreach 循环或额外变量

definitions.ForEach(x => Console.WriteLine(x[0] + "\tdef: " + x[1]));
于 2012-05-03T16:36:51.067 回答