Hallo,
ich such nach einem Weg einem Dictionary mit der Initialisierung Werte zu übergeben.
Ich nutze das Tag Property von Controls um bestimmte Wert zu Hinterlegen. Jetzt sind es ein paar mehr geworden und deshalb würde ich gern im Tag ein Dictionary <string,object> anlegen damit ich auf die einzelnen Werte zugreifen kann.
new Dictionary <string,object> (){wert}
Besten Dank fürs Feedback antoschka
Zu 1.: Ich würde vorschlage, Du siehst Dir mal die Hilfe zum Dictionary an. Es gibt mehrere Konstruktoren mit verschiedenen Parametern....
ja, das habe ich schon gemacht.
EIn Konstruktor nimmt ein IDictionary an. Jetzt habe ich so etwas versucht.
Dictionary<string,string> test = new Dictionary<string,string>((IDictionary<string,string>)new KeyValuePair<string,string>("tescht","tescht"))
Aber keyValuePair ist wohl keine IDictionary Implementierung.
Hat jemand noch ein Idee
antoschka
Einfach eine Funktion basteln, die als Rückgabetyp das entsprechende generische Dictionary hat und als Parameter ein KeyValuePair<KEY,VALUE>[]-Array.
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Hall kleines Eichhörnchen:
meinst Du es ungefähr so?
public class DictionaryInitializer
{
public static IDictionary<string, object> PassElements(params KeyValuePair<string, object>[] pKeyValuePairs)
{
Dictionary<string, object> passElements = new Dictionary<string, object>();
foreach (KeyValuePair<string, object> currentKeyValuePair in pKeyValuePairs)
passElements.Add(currentKeyValuePair.Key, currentKeyValuePair.Value);
return passElements;
}
}
Dictionary<string, object> test = new Dictionary<string, object>
(DictionaryInitializer.PassElements
(new KeyValuePair<string, object>("tescht", new object())));
Geht die Initialisierung noch kompakter?
Besten Dank fürs Feedback antoschka
Habs jetzt so gelöst:
public class DictionaryInitializer<K,V>:Dictionary<K,V>
{
public DictionaryInitializer(K pKey, V pValue)
{
this.Add(pKey, pValue);
}
}
Dictionary<string, object> test = new DictionaryInitializer<string, object>("tescht", new object());
Ich bin mir nicht ganz sicher, aber ich glaube du kannst auch folgendes tun:
Dictionary<typ1, typ2> blubb = new Dictionary<typ1, typ2>() {
{key1, value1},
{key2, value2}
}
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)
jepp funktioniert. Wie findet man soetwas, wenn man es nicht weiß - ist je kein Konstruktor? Besten Dank antoschka
Na doch, der parameterlose Konstruktor wird aufgerufen. Aber hast recht, in der Art steht es nicht unbedingt bei der Klasse, da es nicht spezifisches der Dictionary Klasse ist sondern ein Feature von C# 3.0. Dort wurden Objekt und Listeninitialisierer in der Art eingeführt. In Beschreibungen zur Sprache findet man dann sowas.
Baka wa shinanakya naoranai.
Mein XING Profil.
3.0 ist auch nur ein Marketing-Gag. Bei 3.0 oder 3.5 gibts nur ein paar neue Dlls sowie der C#-Compiler wurde etwas aufgebohrt. Die CLR ist die selbe.
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Also sollte es doch auch mit dem reinen 2.0 gehen. schließlich kommt das Dictionary ja aus der mscorlib oder? Ist für mich ziemlich wichtig. Kann da jemand noch etwas zu sagen? antoschka
Hallo antoschka,
mit Dictionary selbst hat das gar nichts zu tun. Es ist wie talla sagt eine Frage der Initialisierungssyntax. Und da es ein Feature des Compilers ist, macht es schon einen Unterschied, ob C# 2.0 oder C# 3.0. Die Listen-Initialisierungssyntax gab es bei C# 2.0 meines Wissens nur für Arrays, aber nicht für andere Typen.
herbivore
Hallo antoschka,
Ist für mich ziemlich wichtig.
Wieso denn?
In meinen Augen spielt es keine Rolle, wann die Werte, bzw. in deinem Beispiel der Wert, eingefügt werden. Wichtig ist doch bloß, dass sie enthalten sind ?!?
Auch der Unterschied im Stil ist IMHO minimalstens.