As I know if i declared a dictionary, i could call myDict.Clear() for reusing purpose.
Now if I declared a sb as a StingBuilder obj.
StringBuilder sb = new StringBuilder();
How to reuse sb? thank you.
Acturally i need print all the possible conditions for mainDict.
one of sb expression like this(inclued in the code below)
sb.AppendFormat("{0}/{1}/{2}/{3}, {4}", pair1.Key, pair2.Key, pair3.Key, pair4.Key, pair4.Value);
Console.WriteLine(sb.ToString());
If i declared a lot of StringBuilder objs, i still can't detect how many objs is enough for me. acturally the mainDict is very complex. The code above is a practice only. thanks.
Code updated at Jan 04.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
class test
{
private static Dictionary<string, object> mainDict = new Dictionary<string, object>();
public static void Main()
{
Dictionary<string, object> aSubDict = new Dictionary<string,object>();
Dictionary<string, object> aSub1Dict = new Dictionary<string, object>();
Dictionary<string, object> aSub2Dict = new Dictionary<string, object>();
Dictionary<string, object> aSub3Dict = new Dictionary<string, object>();
Dictionary<string, object> aSub4Dict = new Dictionary<string, object>();
mainDict.Add("ADKey", aSubDict);
mainDict.Add("ASKey", "AValue");
aSubDict.Add("BDKey", aSub1Dict);
aSubDict.Add("BSKey", "BValue");
aSub1Dict.Add("CDKey", aSub2Dict);
aSub1Dict.Add("CSKey", "CValue");
aSub2Dict.Add("DDKey",aSub3Dict);
aSub2Dict.Add("DSKey", "DValue");
aSub3Dict.Add("EDKey", aSub4Dict);
aSub3Dict.Add("ESKey", "EValue");
aSub4Dict.Add("FKey", "FValue");
StringBuilder sb;
foreach (KeyValuePair<string, object> pair1 in mainDict)
// watch out for NullReferenceException
if (!ReferenceEquals(null, mainDict[pair1.Key]) && (mainDict[pair1.Key] is string))
{
Console.WriteLine("Key = {0}, Value = {1}", pair1.Key, pair1.Value);
sb = new StringBuilder();
sb.AppendFormat("{0}, {1}", pair1.Key, pair1.Value);
Console.WriteLine(sb.ToString());
}
// IDictionary is not the one from the Generics namespace, it is the one from the System.Collections namespace
else if (!ReferenceEquals(null, mainDict[pair1.Key]) && (mainDict[pair1.Key] is Dictionary<string, object>))
{
foreach (KeyValuePair<string, object> pair2 in (Dictionary<string, object>)pair1.Value)
if (!ReferenceEquals(null, ((Dictionary<string, object>)pair1.Value)[pair2.Key]) && (((Dictionary<string, object>)pair1.Value)[pair2.Key] is string))
{
Console.WriteLine("SubKey = {0}, Value = {1}", pair2.Key, pair2.Value);
sb = new StringBuilder();
sb.AppendFormat("{0}/{1}, {2}", pair1.Key, pair2.Key, pair2.Value);
Console.WriteLine(sb.ToString());
}
else if (!ReferenceEquals(null, ((Dictionary<string, object>)pair1.Value)[pair2.Key]) && (((Dictionary<string, object>)pair1.Value)[pair2.Key] is Dictionary<string, object>))
{
foreach (KeyValuePair<string, object> pair3 in (Dictionary<string, object>)pair2.Value)
if (!ReferenceEquals(null, ((Dictionary<string, object>)pair2.Value)[pair3.Key]) && (((Dictionary<string, object>)pair2.Value)[pair3.Key] is string))
{
Console.WriteLine("SubKey = {0}, Value = {1}", pair3.Key, pair3.Value);
sb = new StringBuilder();
sb.AppendFormat("{0}/{1}/{2}, {3}", pair1.Key, pair2.Key, pair3.Key, pair3.Value);
Console.WriteLine(sb.ToString());
}
else if (!ReferenceEquals(null, ((Dictionary<string, object>)pair2.Value)[pair3.Key]) && (((Dictionary<string, object>)pair2.Value)[pair3.Key] is Dictionary<string, object>))
{
foreach (KeyValuePair<string, object> pair4 in (Dictionary<string, object>)pair3.Value)
if (!ReferenceEquals(null, ((Dictionary<string, object>)pair3.Value)[pair4.Key]) && (((Dictionary<string, object>)pair3.Value)[pair4.Key] is string))
{
Console.WriteLine("SubKey = {0}, Value = {1}", pair4.Key, pair4.Value);
sb = new StringBuilder();
sb.AppendFormat("{0}/{1}/{2}/{3}, {4}", pair1.Key, pair2.Key, pair3.Key, pair4.Key, pair4.Value);
Console.WriteLine(sb.ToString());
}
else if (!ReferenceEquals(null, ((Dictionary<string, object>)pair3.Value)[pair4.Key]) && (((Dictionary<string, object>)pair3.Value)[pair4.Key] is Dictionary<string, object>))
{
foreach (KeyValuePair<string, object> pair5 in (Dictionary<string, object>)pair4.Value)
if (!ReferenceEquals(null, ((Dictionary<string, object>)pair4.Value)[pair5.Key]) && (((Dictionary<string, object>)pair4.Value)[pair5.Key] is string))
{
Console.WriteLine("SubKey = {0}, Value = {1}", pair5.Key, pair5.Value);
sb = new StringBuilder();
sb.AppendFormat("{0}/{1}/{2}/{3}/{4}, {5}", pair1.Key, pair2.Key, pair3.Key, pair4.Key, pair5.Key, pair5.Value);
Console.WriteLine(sb.ToString());
}
else if (!ReferenceEquals(null, ((Dictionary<string, object>)pair4.Value)[pair5.Key]) && (((Dictionary<string, object>)pair4.Value)[pair5.Key] is Dictionary<string, object>))
{
foreach (KeyValuePair<string, object> pair6 in (Dictionary<string, object>)pair5.Value)
if (!ReferenceEquals(null, ((Dictionary<string, object>)pair5.Value)[pair6.Key]) && (((Dictionary<string, object>)pair5.Value)[pair6.Key] is string))
{
Console.WriteLine("SubKey = {0}, Value = {1}", pair6.Key, pair6.Value);
sb = new StringBuilder();
sb.AppendFormat("{0}/{1}/{2}/{3}/{4}/{5}, {6}", pair1.Key, pair2.Key, pair3.Key, pair4.Key, pair5.Key, pair6.Key, pair6.Value);
Console.WriteLine(sb.ToString());
}
else if (!ReferenceEquals(null, ((Dictionary<string, object>)pair5.Value)[pair6.Key]) && (((Dictionary<string, object>)pair5.Value)[pair6.Key] is Dictionary<string, object>))
{
Console.WriteLine("sub Dict Found");
}
}
}
}
}
}
}
}
Output like this
SubKey = FKey, Value = FValue
ADKey/BDKey/CDKey/DDKey/EDKey/FKey, FValue
SubKey = ESKey, Value = EValue
ADKey/BDKey/CDKey/DDKey/ESKey, EValue
SubKey = DSKey, Value = DValue
ADKey/BDKey/CDKey/DSKey, DValue
SubKey = CSKey, Value = CValue
ADKey/BDKey/CSKey, CValue
SubKey = BSKey, Value = BValue
ADKey/BSKey, BValue
Key = ASKey, Value = AValue
ASKey, AValue