Properties w Dictionary

0

Witam

public string s1 {get; set; }
public string s2 {get; set; }
public string s3 {get; set; }
public Dictionary<int, string> d = new Dictionary<int, string>();
d.Add(1,s1);
d.Add(2,s1);
d.Add(3,s1);
...
d[2] = "2222";

Potrzebuję do słownika wstawić referencje do właściwości. W powyższym przykładzie wstawia mi tam wartość podstawioną z get.
Czy jest jakiś sposób aby linia d[2] = "2222"; wstawiła do s2 ten łańcuch.

2

Coś takiego Ci pasuje, czy koniecznie chcesz użyć znaku "="?

using System;
using System.Collections.Generic;

namespace ConsoleApplication2
{
    class TestClass
    {
        public string S1 { get; set; }
        public string S2 { get; set; }
        public string S3 { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var map = new Dictionary<int, Action<TestClass, string>>{
                { 1, (tc, x) => tc.S1 = x },
                { 2, (tc, x) => tc.S2 = x },
                { 3, (tc, x) => tc.S3 = x },
            };

            var testClass = new TestClass();
            map[2].Invoke(testClass, "2222");

            Console.WriteLine(testClass.S1);
            Console.WriteLine(testClass.S2);
            Console.WriteLine(testClass.S3);
        }
    }
}
0

O to chodzi że te właściwości to są w różnych klasach i bibliotekach MEF i ten słownik to ma być miejsce gdzie je zbiorę aby prosto można było na nich działać. W rozwiązaniu wstawiałeś wartości przez Action bo też tak zadałem pytanie, ale ja nie mam też jak ich odczytać więc musiałbym pewnie dać

Dictionary<string,  Action<.......,  string>[]>

, gdzie pod 0 bylby get, 1-set. Tylko co wstawić w miejsce ....... bo zaproponowana klasa nie wchodzi w grę.

0

Jeśli te klasy nie mają żadnego typu bazowego, to wstaw dynamic. Tylko nie będziesz miał intellisense, weryfikacji na etapie kompilacji, no i nie będzie to też wydajne.

0

Albo Object zamiast dynamic i rzutowanie przed uzyciem

0

Dzięki za odpowiedzi, już sobie poradziłem w ten sposób że nie daje parametru TestClass bo dodawanie do słownika mam w konstruktorze a tam mam dostęp do właściwości i bezpośrednio do niej w delegacie wstawiam lub pobieram.

A czy można delegata napisać w stringu przekazanym przez commandparameter w wpf i przez rzutowanie na dynamic zmusić kompilator aby rozpoznał w nim właśnie delegata.

0

to jest jakiś projektowy WTF. komplikujesz kod, a na pewno jest prostsze rozwiązanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1