【发布时间】:2017-03-03 20:33:51
【问题描述】:
我写了一个返回的方法
List<KeyValuePair<CommandType, List<string>>>
CommandType 的类型为 enum
public enum CommandType
{
Programmed,
Manual
}
我的问题是KeyValuePair 中的值有时是enum,有时是字符串列表,但我需要将所有KeyValuePair 保留在一个列表中。
目前,我将值作为 keyvaluepair 中的对象传递,当方法返回列表并迭代它时,基于键,我将值转换回其原始类型。
有没有更好的方法来实现这一点?
这是一个示例代码
public enum ProgrammedCommands
{
Sntp,
Snmp,
}
private List<KeyValuePair<CommandType, object>> GetCommandsFromTemplate(string[] templateLines)
{
var list = new List<KeyValuePair<CommandType, object>>();
if (templateLines != null)
for (int lineIndex = 0; lineIndex < templateLines.Length; lineIndex++)
{
if (templateLines[lineIndex].Contains("!*") && templateLines[lineIndex].Contains("*!"))
{
KeyValuePair<CommandType, object> ProgrammedSetting;
List<string> programmedCommandList;
if (templateLines[lineIndex].Contains("SNTP - SNTP Server Commands"))
{
ProgrammedSetting = new KeyValuePair<CommandType, object>(CommandType.Programmed, ProgrammedCommands.Sntp);
list.Add(ProgrammedSetting);
}
else if (templateLines[lineIndex].Contains("MANUAL"))
{
lineIndex++;
List<string> manual = new List<string>();
while (true)
{
if (lineIndex >= templateLines.Length)
break;
if (templateLines[lineIndex].Contains("!!["))
lineIndex++;
else if (templateLines[lineIndex].Contains("]!!"))
break;
else
{
manual.Add(templateLines[lineIndex]);
lineIndex++;
}
}
ProgrammedSetting = new KeyValuePair<CommandType, object>(CommandType.Manual, manual);
list.Add(ProgrammedSetting);
}
}
}
return list;
}
【问题讨论】:
-
您在寻找
Dictionary<object, object>还是List<KeyValuePair<object,object>>? -
编写一个具有您需要的属性的类并返回一个
List<T>。你所拥有的东西很难阅读,也很难维护。这是你的生活,但只要你处理这段代码,你就会以无休止的麻烦为代价节省一点时间。KeyValuePair在这里是一个非常不合适的选择。 -
@EdPlunkett 我来这里是为了学习,“疯狂”这个词并没有教给我任何东西。但是像这样的词:效率不高,做法不好……加上一些简短的解释可以教很多东西。
-
@EdPlunkett a List
不会解决问题,因为当我初始化要添加项目的列表时,我需要将 T 设置为 ProgrammedCommand或List<string>,因此不能将两种类型添加到同一个列表中。我想我需要创建一个具有两个属性的类,一个ProgrammedCommand和一个object类型的第二个属性,然后我可以维护一个从该类实例化的对象列表,这将使代码更清晰。我需要做的就是按顺序遍历列表,仅此而已!所以感谢@EdPunkett 的建议,感谢@Reza Aghaei 的帮助 -
@kat1330 1) 用户没有尝试存储
enum和string。他正在尝试存储enum和List<String>,因此使用string没有意义。 2) 当您可以使用对象来装箱/拆箱值时,将枚举存储为字符串并将它们从字符串转换回来似乎效率不高。 3) 有时,根据某人的意见,解决方案是丑陋或尴尬的,因为它们似乎没有任何附加价值。 4) 毕竟,对我来说,你似乎更多的是被冒犯而不是对真正的原因感到好奇。这就是为什么我给你写了一个评论,如果你不喜欢它,请忽略它:)