Diese Frage könnte ein Hinweis darauf sein, dass sich dahinter ein schlechtes Design verbergen könnte. Das ist immer der Fall, wenn Sie eine Sammlung heterogener Objekte benötigen.
Da Sie den Typ der Objekte in der Sammlung nicht kennen, müssen Sie immer eine Art von Typüberprüfung durchführen, z. B. if (dictionary["xy"] is string) {...}
was ein Codegeruch ist.
Wäre es eine Möglichkeit, eine gemeinsame Klasse zu bilden? Das würde Ihnen erlauben, einige gemeinsame Operationen darauf zu spezifizieren (weil Sie wahrscheinlich einige gemeinsame Operationen brauchen, wenn Sie sie im gleichen Diktat brauchen). Zum Beispiel etwas wie (betrachten Sie es als Pseudocode):
class Base
{
bool IsCollection;
}
class StringItem : Base
{
string Contents;
IsCollection = false;
override ToString() { return this.Contents; }
}
class ListItem : Base
{
List<StringItem> Contents;
IsCollection = true;
override ToString() { return string.Join(",", this.Contents.ToArray() }
}
Dann könnten Sie eine Dictionary<string, Base>
und verwenden Sie auf Base definierte Operationen wie ToString
oder irgendeinen Brauch.