Spaß mit Strings: "Hallo".Equals("ollaH") == true ?! ;-)

Thomas Darimont

Erfahrenes Mitglied
Hallo!

Schaut mal hier:
C#:
using System;
using System.Collections.Generic;
using System.Text;

namespace De.Tutorials.Training
{
    public class CrazyStrings
    {
        public static void Main(string[] args)
        {
            DoSomeMagic();
            Console.WriteLine("Hallo".Equals("ollaH"));
        }
        #region magic...
        public static void DoSomeMagic()
        {
            char[] chars = "Hallo".ToCharArray();
            for (int i = 0; i < chars.Length; i++)
            {
                InvokeMethodOn("Hallo", "SetChar", new Type[] { typeof(Int32), typeof(Char) }, new object[] {i,chars[chars.Length -i -1]});
            }
        }

        private const System.Reflection.BindingFlags ALL_INSTANCE_BOUND_METHODS = System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.InvokeMethod;
        public static object InvokeMethodOn(object instance, string methodName, Type[] signature, object[] args)
        {

            System.Reflection.MethodInfo methodInfo = instance.GetType().GetMethod(methodName, ALL_INSTANCE_BOUND_METHODS, null, signature, null);
            return methodInfo.Invoke(instance,args);

        }
        #endregion
    }
}

Gruß Tom
 
Hallo!

21:20 ;-) Wie man sieht versuche ich die "alten" Java Tricks auch unter C# zum Laufen zu bekommen und ich muss sagen, dass das bei dem meisten Kram auf anhieb funktioniert ... stay tuned ;-)

Gruß Tom
 
Ich hab das ganze vorhin mal fix probiert, aber mit Mono (Version weiss ich grad nicht mehr, bin heut ein wenig mued ;) ) wollt das nicht kompilieren.
 
Hallo!

bei mir kann ich das (unter Windows) unter Mono 1.1.xxx kompilieren. Man muss nur
using System.Collections.Generic; rausnehmen.

Gruß Tom
 
Das werd ich dann nachher wenn ich heimkomm mal probieren.
Muss ich noch was rausnehmen wenn ich das entferne? Wenn nicht, warum ist es dann ueberhaupt da?
 
Hallo!

Weil das in dem blöden Visual Studio 2005 Template so drinnen steht und ich das Template noch nicht gewechselt hab...

Gruß Tom
 
Hmm, funktioniert immer noch nicht so ganz.
Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object
in <0x00031> De.Tutorials.Training.CrazyStrings:InvokeMethodOn (System.Object instance, System.String methodName, System.Type[] signature, System.Object[] args)
in <0x000de> De.Tutorials.Training.CrazyStrings:DoSomeMagic ()
in <0x0000a> De.Tutorials.Training.CrazyStrings:Main (System.String[] args)
Mono 1.1.14, Linux 2.6.17.6
 
Hallo!

hehe... es kann natürlich sein, dass die interne Implementierung der String Klasse unter Mono ganz anders ausschaut ;-)

Gruß Tom
 

Neue Beiträge

Zurück