Wyświetlanie wszystkich zmiennych double w funkcji

0

Hej ;-)
załóżmy, że mamy funkcję licz();

private void licz(){
double zmienna1;
double zmienna2;
double zmienna3;
double zmienna4;
int zmienna10;

zmienna1=5.12;
zmienna2=Convert.ToDouble(textbox1.text); // załóżmy, że wartość ta wynosi 123/456
zmienna3=zmienna22.14;
zmienna4=Math.PI
zmienna2;

}

Teraz chciałbym aby wszysktie zmienne typu double w funkcji licz(); były wyświetlanie (np. w messageboxie), ale chciałbym aby wyświetlana była nazwa zmiennej double (np. zmienna1, zmienna2).. oraz ich wartość

czyli np. messagebox.show("zmienna1=5.12\n"+"zmienna2=123.456\n")

Znalazłem coś takiego:
http://www.dotnetperls.com/reflection-field
Tylko tam jest tworzona klasa ReflectionTest, a ja chchciałbym, aby wszystkie zmienne typu double w funkcji licz() były wyświetlane..

Coś takiego jak debugger, ale dla osoby, która nie ma zainstalowanego środowiska VisualStudio..
Ma ktoś jakiś pomysł na to?
Mógłbym 'ręcznie' to zrobić, ale mam dużo zmiennych i myślę, że jest jakiś szybszy/automatyczny sposób na to

Myślę nad czymś takim (bazując na artykule, który znalazłem),, tylko mam problem ze składnią **foreach **;-)

foreach (var field in   EVERY DOUBLE IN licz()  ) 
{
 string name = field.Name; // Get string name
	    object temp = field.GetValue(null); // Get value
	    if (temp is int) // See if it is an integer.
	    {
		int value = (int)temp;
		Console.Write(name);
		Console.Write(" (int) = ");
		Console.WriteLine(value);
	    }
	    else if (temp is string) // See if it is a string.
	    {
		string value = temp as string;
		Console.Write(name);
		Console.Write(" (string) = ");
		Console.WriteLine(value);
	    }
}
0

Nie jest to niestety możliwe - kompilator podczas optymalizacji może się nawet pozbyć wszystkich zmiennych z funkcji jeśli uzna to za stosowne
przy pomocy refleksji można jedynie wyciągnąć listę pól i własności klasy. Co do metody - możesz jedynie pobrać liczbę i typ argumentów wejściowych

Po co Ci takie cuda?

0

chciałbym aby wszysktie zmienne typu double w funkcji licz(); były wyświetlanie (np. w messageboxie), ale chciałbym aby wyświetlana była nazwa zmiennej double (np. zmienna1, zmienna2).. oraz ich wartość

przecież zmienne w funkcji wartości otrzymują dopiero w czasie działania programu i te wartości się zmieniają. Jakie wartości byś chciał pobrać?

0

pliki pdb generowane przez vs zawieraja informacje ktorych potrzebujesz ale chyba nie tedy droga.
mozesz tez opakowac sobie te pola w strukture/klase i za pomoca resharpera wygenerowac metode ToString, ale znowu - nie jest to jakas super praktykal
czemu nie podzielic tej metody na mniejsze i dodac logowanie (np przy uzyciu bibliotek typu log4net czy nlog)?

1

Założę się że to co chcesz zrobić robisz źle.

class Variable
{
    public string Name {get;set;}
    public double Value {get;set;}
}

var var1 =new Variable{ Name="Zmienna1", Value = 0.1}
var var2 =new Variable{ Name="Zmienna2", Value = 1.1}
..

MessageBox.Show(string.Format("Zmienna o nazwie {0} = {1}",var1.Name, var1.Value);

Albo użyć gotowej klasy KeyValuePair, lub Dictionary żeby przechowywać całe kolekcje.

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