Dodanie wartości do zmiennej object

0

Cześć,
Mam zmienną object. Jak dodać do tej zmiennej kolejną wartość?

object obj;
obj = new { data_1 = "data1" };
obj += new { data_2 = "data2" }; //tak się nie da :)

Dodam tylko, że pierwsza wartość jest dodawana w innym miejscu.

1

To nie javascript, tutaj sie tak nie da zrobić. Potrzebujesz wewnątrz obiektu kolekcję do której możesz dodawać,

 var obj = new { data = new Dictionary<string,string>() };
obj.data["data_1"] = "data1"; ;
obj.data["data_2"] = "data2";

a najlepiej to jeszcze pełnoprawny typ (klasę) dla obiektu jeśli chcesz go używać w rożnych miejscach programu.

0

Dzięki za zainteresowanie chociaż nie do końca o to mi chodziło :)
Ale znalazłem coś takiego http://kylefinley.net/typemerger

Może się komuś przyda. Sprawdziłem i działa.

PS. Swoją drogą nie spodziewałem się żeby połączenie dwóch object-ów wymagało takiego zachodu...

1
rmawerik napisał(a):

PS. Swoją drogą nie spodziewałem się żeby połączenie dwóch object-ów wymagało takiego zachodu...

Po polsku: wkładanie spodni przez głowę może byc skomplikowane. Po angielsku: probably XY problem.

A wystarczy przed klepnięciem linijki kodu z tym objectem pomyślec nad jej przeznaczeniem. Dwa kawałki metalu można łączyć młotkiem, brehą, prasą, spawaniem (i to dobra analogia tego pomysłu), lub sobie to zaplanować.

0

Napisz co w końcu wymyśliłeś . Jestem ciekawy . Powiem szczerze , że nie wiele zrozumiałem z tego co napisałeś .

0
AnyKtokolwiek napisał(a):

A wystarczy przed klepnięciem linijki kodu z tym objectem pomyślec nad jej przeznaczeniem. Dwa kawałki metalu można łączyć młotkiem, brehą, prasą, spawaniem (i to dobra analogia tego pomysłu)

Spawanie to akurat prawidłowa metoda łączenia metali. Tutaj dobrą analogią będą gluty z nosa.

1

Jeśli chodzi Ci o używanie obiektów w taki sposób, jak się to robi w języku JavaScript, to możesz użyć klasy ExpandoObject z przestrzeni nazw System.Dynamic.

Twój przykład wyglądałby tak:

dynamic obj = new ExpandoObject();
obj.data_1 = "data1";
obj.data_2 = "data2";

Możesz też dodać właściwość, która wskazuje na funkcję:

obj.print = (Action)(() => { Console.WriteLine(obj.data_2); });

Nie wiem, czy w ciele funkcji można w jakiś sposób dodać referencję do obiektu, na rzecz którego została wywołana funkcja, tak jak się to robi za pomocą słowa kluczowego this w JavaScript. Próbowałem to zrobić na kilka sposobów, ale za każdym razem utknąłem w martwym punkcie i musiałem zmieniać pomysł albo wychodziło mi coś sztucznego i zbyt skomplikowanego, co udowadniało, że nie ma sensu udawać zachowania JavaScript w C#.

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