Да, ваш словарь больше не будет строго набираться - при первом подходе вы можете сделать что-то вроде:
string value = myDict["foo"]["bar"];
Во втором подходе это больше невозможно, поскольку вы должны разыграть первого:
string value = ((Dictionary<string,string>)myDict["foo"])["bar"];
Похоже, что ваша проблема может быть решена с помощью лучшего подхода к проектированию. Как правило, необходимость повторного проектирования решения позволяет избежать хранения объектов различного типа в одной и той же структуре данных, поэтому почему вам нужно это сделать?
Edit:
Если вы просто хотите обработать null
значения, вы можете просто сделать что-то вроде:
string value = myDict["foo"] != null ? myDict["foo"]["bar"] : null;
Или завернутый в метод расширения:
public static T GetValue<T>(this Dictionary<T, Dictionary<T,T>> dict,
T key, T subKey) where T: class
{
T value = dict[key] != null ? dict[key][subKey] : null;
return value;
}
string value = myDict.GetValue("foo", "bar");