如何显示/输出/操作字典的内容?

时间:2019-05-16 12:20:36

标签: c# list dictionary

我需要根据我在控制台中输入的List来显示Dictionary的{​​{1}},如果错误,则显示int key的错误消息控制台中的输入范围也是如此。

throw
  

System.Format.Exception:“索引(从零开始)必须大于或   等于零且小于参数列表的大小。

3 个答案:

答案 0 :(得分:2)

仅出于完整性考虑:有时我使用Aggregate代替Join,因为它可以给您更多控制权。

var values = ChannelLookup[val].Values;
var display = values.Aggregate((a, b) => $"{a}, {b}");

要使用Linq函数Aggregate,您需要在using指令中添加System.Linq

答案 1 :(得分:1)

您必须显示项目的任意数量(例如3-"[A]", "[B]", "[C]"或仅显示1-“ A”);让我们Join而不是Format

public class Channel {
  private Dictionary <int, List<string>> ChannelLookup = 
    new Dictionary <int, List<string>> () {
      {1, new List<string>() {"[A]", "[B]", "[C]"} },
      {2, new List<string>() {"[A]"} },
    };

  public string channelDisplay (int key) {
    if (ChannelLookup.TryGetValue(key, out var items))
      return string.Join(",", items);
    else 
      throw new ArgumentException($"{nameof(key)} = {key} not found", nameof(key));
  }
}

甚至

public string channelDisplay(int key) => ChannelLookup.TryGetValue(key, out var items)
  ? string.Join(",", items)
  : throw new ArgumentException($"{nameof(key)} = {key} not found", nameof(key));

答案 2 :(得分:0)

.NET不允许您使用未使用的格式参数,即您不能这样做 string.Format("{0},{1}", "first value"),而未同时提供{1}的值。

您最好的选择可能是字符串。加入。 string.Join将连接您提供给它的值,并在每个值之间放置指定的分隔符。

See the docs here

public class Channel
{
 private Dictionary <int, string> ChannelLookup = 
 new Dictionary <int, string> ()
 {
  {1, new List<string>{"[A]","[B]","[C]"}},
  {2, new List<string>{"[A]"}
 };

 public string channelDisplay (int val)
 {
  if(!ChannelLookup.ContainsKey(val))
  {
    // throw exception
  }
  else
  {
    string display = string.Join(",", ChannelLookup[val]);
    return display;
  }
 }
}