Laden...

Dictionary beim initialisieren Werte übergeben

Erstellt von antoschka vor 15 Jahren Letzter Beitrag vor 15 Jahren 3.193 Views
A
antoschka Themenstarter:in
371 Beiträge seit 2007
vor 15 Jahren
Dictionary beim initialisieren Werte übergeben

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.

  1. Frage: Kann ich irgendetwas schreiben wie
new Dictionary <string,object> (){wert}
  1. Frage gibt es eine BestPractice um diesen Anwendungsfall vielleicht anders zu lösen

Besten Dank fürs Feedback antoschka

T
210 Beiträge seit 2006
vor 15 Jahren

Zu 1.: Ich würde vorschlage, Du siehst Dir mal die Hilfe zum Dictionary an. Es gibt mehrere Konstruktoren mit verschiedenen Parametern....

A
antoschka Themenstarter:in
371 Beiträge seit 2007
vor 15 Jahren

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

F
10.010 Beiträge seit 2004
vor 15 Jahren

Im FW 3,5 geht das Automatisch, vorher geht nicht.

3.971 Beiträge seit 2006
vor 15 Jahren

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...

A
antoschka Themenstarter:in
371 Beiträge seit 2007
vor 15 Jahren

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

A
antoschka Themenstarter:in
371 Beiträge seit 2007
vor 15 Jahren

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());
G
538 Beiträge seit 2008
vor 15 Jahren

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)

A
antoschka Themenstarter:in
371 Beiträge seit 2007
vor 15 Jahren

jepp funktioniert. Wie findet man soetwas, wenn man es nicht weiß - ist je kein Konstruktor? Besten Dank antoschka

6.862 Beiträge seit 2003
vor 15 Jahren

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.

A
antoschka Themenstarter:in
371 Beiträge seit 2007
vor 15 Jahren

wie 3.0???
Ich arbeite meines Wissens mit den Assemblies der 2.0?

3.971 Beiträge seit 2006
vor 15 Jahren

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...

A
antoschka Themenstarter:in
371 Beiträge seit 2007
vor 15 Jahren

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

49.485 Beiträge seit 2005
vor 15 Jahren

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

5.742 Beiträge seit 2007
vor 15 Jahren

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.