を返すメソッドを書きました
List<KeyValuePair<CommandType, List<string>>>
CommandType
タイプです enum
public enum CommandType
{
Programmed,
Manual
}
私の問題は、の値がであるKeyValuePair
場合もenum
あれば、文字列のリストである場合もありますが、すべてKeyValuePair
を1つのリストに保持する必要があります。
現在、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;
}
異なるタイプに単一のストレージを使用する場合、値のタイプは実行時にのみ決定できるobject
ため、ボックス化値にはタイプを使用する必要があります。次に、タイプされた方法で値を操作する必要がある場合は、そのタイプについては、希望のタイプに箱から出して使用します。
したがって、要件に基づいて次のデータ構造の1つを使用できます。
Dictionary<CommandType, object>
←キーは一意である必要があります。List<KeyValuePair<CommandType, object>>
←ペアのキーは一意である必要はありません。注:あなたはおそらく、共通の基本クラスを作成するようなソリューションを想像することができBaseType
、異なる2導き出すListContainer
とEnumContainer
からBaseType
と作成ListContainer
し、EnumContainer
中にランタイムや店ではDictionary<CommandType, BaseType>
。このような構造は、オブジェクトを使用するのではなく、ストレージを目的のタイプに制限するのに役立つ可能性があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加