Programmbaum auswerten - beliebige Rückgabetypen?



  • Hi,

    ich möchte mit einer Methode Variablen aller Datentypen addieren, zum Beispiel double+double oder int+int. Der Datentyp steht aber erst zur Laufzeit fest!

    Wie könnte man das in C# lösen?

    mfg. Tubos

    edit:
    Hab jetzt eine quick&dirty-Lösung, die mit boxing arbeitet:

    object value1;
    object value2;
    object result;
    
    // bei der Berechnung
    if (value1 is int)
    {
    result = (object) ((int)value1+(int)value2);
    }
    

    Wenn jemand eine bessere Lösung hat, bitte melden!
    Ansonsten werde ich es so machen.



  • Dir ist bestimmt schonmal die Methode

    GetType über den Weg gelaufen?

    Dann kannst Du sowas machen z.B.:

    using System;
    
    namespace Typen
    {
    
    	class Class1
    	{
    		[STAThread]
    		static void Main(string[] args)
    		{
    
    			int i = 0;
    			String s = "";
    			double d = 0.0d;
    			float f = 0.0f;
    			object [] objects = {(object) i, (object) s, (object) d, (object) f};
    
    			for(int idx=0;idx < objects.Length;idx++)
    				Console.WriteLine(WhatIsIt(objects[idx]));
    
    			Console.ReadLine();
    		}
    
    		static String WhatIsIt(object o)
    		{
    			String typname;
    			switch(o.GetType().ToString())
    			{
    				case "System.String":
    					typname = "System.String";
    					break;
    
    				case "System.Int16":
    					typname = "System.Int16";	
    					break;
    
    				case "System.Int32":
    					typname = "System.Int32";
    					break;
    
    				case "System.Double":
    					typname = "System.Double";
    					break;
    
    				case "System.Float":
    					typname = "System.Float";
    					break;
    
    				default:
    					return "irgend ein anderer Typ";
    			}
    
    			return typname;
    		}
    	}
    }
    

    Gruss sclearscreen



  • Tubos schrieb:

    Hi,

    ich möchte mit einer Methode Variablen aller Datentypen addieren, zum Beispiel double+double oder int+int. Der Datentyp steht aber erst zur Laufzeit fest!

    Wie könnte man das in C# lösen?

    mfg. Tubos

    edit:
    Hab jetzt eine quick&dirty-Lösung, die mit boxing arbeitet:

    object value1;
    object value2;
    object result;
    
    // bei der Berechnung
    if (value1 is int)
    {
    result = (object) ((int)value1+(int)value2);
    }
    

    Wenn jemand eine bessere Lösung hat, bitte melden!
    Ansonsten werde ich es so machen.

    Warum findest Du Deine Lösung "schnell und dreckig"? Wenn C# doch solche Mechanismen bereitstellt, soll es auch verwendet werden, fertig und pasta.



  • Warum findest Du Deine Lösung "schnell und dreckig"?

    Weil ich denselben Code öfters schreiben muss: je einmal für byte, short, int, float, double, ...
    Habe aber entschieden, dass es für meinen Verwendungszweck so völlig ok ist.

    Dir ist bestimmt schonmal die Methode

    GetType über den Weg gelaufen?

    Ja. Wäre ja in diesem Fall genauso wie meine Lösung. Jedenfalls danke für diese zweite Variante.


Anmelden zum Antworten