Odwołanie do obiektu którego definicja znajduje się w stringu

0

Cześć,

czy istnieje sposób aby użyć odwołania, którego definicja znajduje się w zmiennej ?

string definicja=@"kontrahent["Nazwa"].ToString()";
foreach (DataRow kontrahent in dsDane.Kontrahenci)
{
  Console.WriteLine(definicja);
}

Przedstawiony sposób nie działa. Na ekranie dostaję napis: kontrahent["Nazwa"].ToString() zamiast spodziewanej wartości Nazwa obiektu kontrahent.
pzdr

2

Dlaczego spodziewasz się takiej wartości, skoro deklarujesz zmienną o wartości @"kontrahent["Nazwa"].ToString()" i dokładnie ją wyświetlasz?

Lepiej napisz, co naprawdę chcesz osiągnąć, abyśmy uniknęli straty czasu na rozwiązywanie problemu XY.

0

Jeśli dobrze się domyślam o co Ci chodzi (a z Twojego postu nie wiadomo o co) to masz jakieś obiekt podany jako JSON w stringu, i chcesz wyciągnąć wartość właściwości Nazwa z tego obiektu. W takim przypadku najprościej sparsowac ten obiekt, np. przy użyciu biblioteki Json.NET. Możesz za jej pomocą albo zdeserializowac obiekt na konkretny typ (np. Kontrahent) lub na JObject.

0
somekind napisał(a):

Dlaczego spodziewasz się takiej wartości, skoro deklarujesz zmienną o wartości @"kontrahent["Nazwa"].ToString()" i dokładnie ją wyświetlasz?

Lepiej napisz, co naprawdę chcesz osiągnąć, abyśmy uniknęli straty czasu na rozwiązywanie problemu XY.

Już wyjaśniam,
szukam pomysłu na to aby zamiast deklarowanego w pętli odwołania do obiektu kontrahent:

Console.WriteLine(kontrahent["Nazwa"].ToString());

użyć takiej samej definicji przypisania ale pobranej ze zmiennej typu string.
To mi umożliwi utworzenie definicji zestawienia.
Kolejne wiersze definicji będę sobie zaczytywał do zmiennej i podstawiał w przebiegu pętli.
Nie wiem czy to jest wykonalne, podejrzewam że tak, tylko nie wiem jak to zapisać w pętli.

Poniższy fragment kodu:

foreach (DataRow kontrahent in dsDane.Kontrahenci)
{
  Console.WriteLine(kontrahent["Nazwa"].ToString());
}

chciałbym zastąpić kodem:

string definicja=@"kontrahent["Nazwa"].ToString()";
foreach (DataRow kontrahent in dsDane.Kontrahenci)
{
  Console.WriteLine(definicja);
}

Przyjmijmy że do zmiennej definicja została pobrana instrukcja z szablonu jakiegoś zestawienia.
Z góry dzięki za podpowiedź.

0

No dobra, a czym ma być ta definicja zestawienia i czemu to musi być string?

0
somekind napisał(a):

No dobra, a czym ma być ta definicja zestawienia i czemu to musi być string?

W aplikacji którą mam na myśli generuję plik xml, w którym chcę umieścić dane pochodzące z tabeli Kontrahent.
Chciałbym w jednym z plików trzymać definicję odwołania do danych tak, aby w przypadku konieczności zmiany struktury generowanego pliku xml nie było konieczności modyfikowania kodu programu, a wystarczyła modyfikacja szablonu definiującego wybieranie danych.
Stąd zmienna typu string, do której założyłem że pobrano jedną z definicji występujących w pliku szablonu.

1
var definicja = new Func<DataRow, string> (x => x["Nazwa"].ToString());

foreach (DataRow kontrahent in dsDane.Kontrahenci)
{
    Console.WriteLine(definicja(kontrahent));
}
1

A to nie możesz w tej swojej definicji trzymać samych nazw kolumn, które i tak są stringami?

0

No dobra, a taki workaround, ale dość prosty:

Masz predefiniowaną listę delegatów Func<DataRow, T>, a z pliku wczytujesz tylko index tego, który ma być użyty?

0
somekind napisał(a):

A to nie możesz w tej swojej definicji trzymać samych nazw kolumn, które i tak są stringami?

Mógłbym, ale ograniczyłbym się wtedy tylko do nazw kolumn.
A jeżeli uda się zastosować podpięcie całej definicji to spodziewam się że mógłbym np. odwołać się do instrukcji warunkowej bądź wybrać część jakiejś wartości tekstowej.

0
WeiXiao napisał(a):
var definicja = new Func<DataRow, string> (x => x["Nazwa"].ToString());

foreach (DataRow kontrahent in dsDane.Kontrahenci)
{
    Console.WriteLine(definicja(kontrahent));
}

Dzięki WeiXiao,
spróbuję zastosować Twój pomysł w kodzie programiku i dam znać czy uzyskałem spodziewany rezultat.

1

SuperXml na gitgubie. Taki system szablonów do generowania xml-a.

0

Zdecydowałem się jednak na utworzenie słownika szablonu generowanego pliku xml, w którym staram się interpretować wartości jakie użytkownik może wprowadzić w kolumnach definicji.
title

Chyba nie ma prostszego rozwiązania chcąc dać użytkownikowi możliwość kształtowania definicji tworzonego pliku oraz mapowania wartości konkretnym elementom, bez konieczności modyfikacji kodu programu.
Dziękuję raz jeszcze wszystkim za podpowiedzi.

0

jedzenie zupy widelcem (czyli XY problem).

Odpocznij, nabierz dystansu i zaprojektuj ZUPEŁNIE inaczej.

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