我需要根据我在控制台中输入的List
来显示Dictionary
的{{1}},如果错误,则显示int key
的错误消息控制台中的输入范围也是如此。
throw
System.Format.Exception:“索引(从零开始)必须大于或 等于零且小于参数列表的大小。
答案 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将连接您提供给它的值,并在每个值之间放置指定的分隔符。
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;
}
}
}