Laden...
Avatar #avatar-3271.jpg
rollerfreak2 myCSharp.de - Member
Software Architekt Dabei seit 14.07.2008 916 Beiträge
Benutzerbeschreibung
Man lernt nie aus...

Forenbeiträge von rollerfreak2 Ingesamt 916 Beiträge

13.09.2011 - 13:18 Uhr

Auch ein guter Decompiler ist dotPeek.

08.09.2011 - 13:11 Uhr

Ich habe mir auch C# Layout beim 1ten Start vom 2010VS ausgewählt und bei mir ist der Shorcut wie auch bei FZelle Ctrl+K Ctrl+D

08.09.2011 - 13:10 Uhr

Hi Cchat,

für deine 1.Hürde kann ich dir folgendes Tutorial empfehlen. Adding a context-menu to the Solution Explorer

Dein zweites Problem das du dann via XDocument etwas ändern möchtest und den Confirm changes Dialog ausblenden willst. Das, denke ich, kannst du wenn überhaupt nur schaffen wenn es ein VS2010 Setting gibt mit dem man das ausschalten kann. Dann könntest du mit deinem PlugIn dieses Settings aktivieren/deaktivieren.

08.09.2011 - 11:12 Uhr

Hallo Cchat,

erst einmal muss ich anmerken das dein Text ziemlich schlecht zu lesen ist. Desweiteren poste mal ein bisschen Code wie du dein "Addin" bereits integriert hast, und was genau du mit

Folgendes, ich kann zwar AddIn für Solution, Projekte schreiben.

meinst. Auch verstehe ich nicht was du mit

wie kann ich die Projekte bzw. Files auflisten? meinst du damit innerhalb des Addins?

Wenn ich ein Projekt-Datei extern ändern würde, dann verlangt VS2010 von mir, dass ich das Projekt "erneut Laden" muss, ich möchte dies automatisch gesehen, wie kann ich es tun?

Heißt du das willst in deinem Addin verhindern das VS diesen Dialog anzeigt wenn immer sich irgendeine SourceDatei außerhalb des VS ändert? Wenn ja dann ist das m.E. nach der falsche weg!

Vorsorglich mal ein Tutorial zum durcharbeite How To implement an VS Addin

30.08.2011 - 10:49 Uhr

Aber wenn er doch sein Update macht, dann sollte die Übersetzung doch durchgeführt worden sein. Hast du mal anschließend ein Invalidate() auf das Control ausgeführt? Dies sollte zwar nicht nötig sein, da das Control selber dafür zu sorgen hat, aber versuch es mal.

29.08.2011 - 16:51 Uhr

Hallo mrennen,

hast du den mal debugged und geschaut ob das Control überhaupt in der Iteration auftaucht? Ich tippe darauf das du es gar nicht durch läufst.

26.08.2011 - 13:04 Uhr

Hi Thorus,

im übrigen wäre die Show Methode nicht das was du brauchst, vielmehr brauchst du die Form.Activate() Methode weil du ja deine Form nur wieder aktivieren willst, gezeigt wird sie ja bereits soweit ich das dem Text entnehmen kann.

Im übrigen ist das auch ein Fall für Kommunikation zwischen 2 Forms.

17.08.2011 - 10:00 Uhr

Hi inflames2k,

ich würde mal folgendes tun, da ich auch der Meinung bin dass das Flag von irgendeiner anderen Instanz zurück gesetzt wird. Mach mal das Flag privat und definiere dafür eine Property. Dann ersetze alle Zuweisungen und benutze die Property und dann debug mal. Eventuell findest du den "Fehler" dann leichter, weil du so leicht mit bekommen würdest was im Workflow nicht stimmt.

Grüße rollerfreak2

09.08.2011 - 23:18 Uhr

Jo werde ich machen.

09.08.2011 - 22:46 Uhr

Jo da hätte ich auch selber drauf kommen können 😦
Im Falle das const wird durch static erstetzt ist es wie du bereits erwähnt hast. Dann wird nicht die Konstante auf den Stack gepackt, sondern man hat dann dort eine InlineFieldInstruction und mit dem ILReader kann man die auch bequem auslesen. Damit sollten dann alle Unklarheiten beseitigt sein 😄

Danke für die Unterstützung!

09.08.2011 - 22:09 Uhr

Hi dN!3L,

danke für die Erklärung. Ich hab jetzt auch mal die Variante mit der Statischen String Klasse probiert. Erstaunlicherweise wird die Konstante direkt in den IL "kompiliert" daher auch bei folgender Variante steht direkt "affe" als InlineString.


public static void Test3()
{
    Test1(Strings.Ident, false);
}

public static class Strings
{
   public const string Ident = "affe";
}

Grüße rollerfreak2!

09.08.2011 - 21:34 Uhr

Ich hab jetzt mal nach einem ILReader gesucht und promt was gefunden. Read IL from MethodBase

Und siehe da ziemlich einfach und schon hat mal den string.


MethodInfo mainMethod = typeof(Program).GetMethod("Test2");
ILReader reader = new ILReader(mainMethod);
foreach (ILInstruction instruction in reader)
{
    if (instruction is InlineStringInstruction)
    {
        string param1 = ((InlineStringInstruction)instruction).String;
    }
}

und siehe da "affe" steh in param1. Ich denke mit dem ILReader ist es leichter als wenn man das selber macht.

09.08.2011 - 21:14 Uhr

Quasi genau so 😄

Es gibt zwar kleine Ausnahmen, da werden die Strings aus einer Statischen Klasse ermittelt, aber generell ist das so wie beschrieben. Ich hab jetzt mal folgendes gemacht.


public static void Test1(string ident, bool flag)
{
    //nothing here
}

public static void Test2()
{
    Test1("affe", false);
}

Dann hab ich mir die MethodInfo (Test2) geholt den IL ByteCode ausgelesen. Leider bin ich nicht so bewandert wie die Parameter bzw. die Instructions dort abgelegt werden. Im vorliegenden Fall ist folgender ByteCode da für die Test2 Methode.


Array  OpCode   OperandType
_________________________
0:0     nop         InlineNode
1:114  ldstr        InlineString
2:21
3:0
4:0
5:112
6:22    ldc.i4.0    InlineNode
7:40    call          InlineMethod
8:2
9:0
10:0
11:6
12:0    nop         InlineNode
13:42  ret           InlineNode

Wo genau bekomme ich jetzt dort mein "affe" her?

09.08.2011 - 19:18 Uhr

Hi dN!3L,

sieht ziemlich kompliziert aus. 😄
Habs jetzt auch mal mit der Reflector API geschafft alle callee's einer Methode zu finden. Morgen auf Arbeit probier ich die Extension Method noch mal aus.

Ein Problem hab ich jedoch noch. Und zwar ist die Methode die ich suche (alle Aufrufe davon) eine Methode eines Interfaces. Diese hat 2 Parameter. Der erste ist vom Type String und wird in den entsprechenden Assemblies immer mit Constanten übergeben.

Quasi so:


((IMyInterface)this).SpecificMethod("identifier", ....);
((IMyInterface)this).SpecificMethod("identifier1", ....);
...

Was ich jetzt noch wissen müsste ist bei dem Methoden-Call die Value's hinter dem ersten Parameter, diese stehen ja schon zur Compilezeit fest. Mit der Reflector API hab ich mich schon dusselig gesucht, aber nix gefunden wie ich daran komme.

Wie siehts mit reiner Reflection aus, gibt es da eine Möglichkeit daran zu kommen?

09.08.2011 - 16:10 Uhr

Hi dN!3L,

ich wollt die Extension Method grad mal ausprobieren und hab jetzt folgende Exception bekommen.

Fehlermeldung:
Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.

Dazu zu sagen ist das die zu analysierende Assembly mehrere andere Referenziert die alle mit .NET 2.0 gebaut sind. Die Exception tritt genau hier auf.


yield return methodInfo.Module.ResolveMethod(BitConverter.ToInt32(ilBytes, position + 1));

Ich hab auch mal versucht vorher alle Abhängikeiten zu laden, daher alle Assemblies die die zu analysierende Assembly referenziert. Selber Fehler.
Dann bin ich auf Mixed mode assembly exception gestoßen. Hab dann einfach in die app.config den besagten eintrag gemacht. Nun kommt jedoch folgende Exception:

Fehlermeldung:
A BadImageFormatException has been thrown while parsing the signature. This is likely due to lack of a generic context. Ensure genericTypeArguments and genericMethodArguments are provided and contain enough context.

Inner Exception:> Fehlermeldung:

An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)"

Passieren tut es wieder bei der besagten stelle und zwar wenn er die Methode IDispose auflösen will. Dann hab ich mal versucht die Überladung mit den 3 Parametern von ResolveMethod zu nehmen dabei bekomme ich zwar keine Exception, aber es wird keine Reference gefunden, da sind aber zu 100% welche drin, mit dem Reflector auch schon verifiziert.

yield return methodInfo.Module.ResolveMethod(BitConverter.ToInt32(ilBytes, position + 1), methodInfo.DeclaringType.GetGenericArguments(), methodInfo.GetGenericArguments());

09.08.2011 - 14:29 Uhr

Hi gfoidl,

das mache ich die ganze Zeit schon, leider ist das Teil obfuscated. Das macht die ganze Sache nahezu unmöglich.

Fehlermeldung:
This item is obfuscated and can not be translated.

[Edit] Mit dem detPeek von JetBrains gehts, da sieht man bisschen mehr als im Reflector. Mal schauen ob ich damit was in Erfahrung bringen kann.

09.08.2011 - 14:19 Uhr

Hi gfoidl,

bin jetzt mal soweit gekommen (mit der Reflector API) das ich alle benötigten Assemblies in den AssemblyManager geladen habe. Dann bin ich durch die besagte "externe" Assembly durch und habe mir die IMethodDeclaration gesucht die ich verfolgen will. Nun dachte ich bietet die API eine Möglichkeit alle Referenzen dieser Methode suchen zu lassen, aber ich finde leider nix. Quasi wie wenn man im Relfector auf Analyze Method klickt, und dann UsedBy. Das ist doch sicher als Funktionalität gekappselt. Jedoch finde ich auch keine Doku von der API sodass ich in der Luft hänge.

Klar ich könnte jetzt jede IInstruction jedes anderen Assembly durch fursten und schauen ob ich da einen Call finde, aber genau das müsste es ja schon so ählich geben in der API.

09.08.2011 - 13:17 Uhr

Hab ein kleines problem, und zwar komm ich nicht an die Reflector API dll ran. Ich hab mir auch mal das zu dem Link gehörende TestRun Projekt runter geladen, aber auch dort ist nur ne Reference drin, die dll an sich nicht. Auch hab ich versucht den Reflector.exe als Referenz (5.0.0.0) einzubinden, alledings gibt es dort das Interface IAssemblyLoader gar nicht. Auch die Klasse Application gibt es im Refelctor.exe nicht. Was mache ich falsch?

[EDIT] Man sollte vorher ab und zu mal die Readme lesen. Aus IAssemblyLoader ist IAssemblyManager geworden bzw. andersherum, und Application mur ApplicationManager heißen.

08.08.2011 - 23:03 Uhr

Hallo gfoidl,

perfekt ich denk damit bekomme ich es hin.

08.08.2011 - 22:10 Uhr

Hi WPF_Noob,

eigentlich ist alles was du brauchst [] (Option) bzw. {} und Gruppennamen. Damit sollte dein Problem umzusetzen sein. Ein gutes Turorial findest du Regex Tutorial hier.

08.08.2011 - 22:01 Uhr

Folgendes Problem,

ich habe mehrere Assemblies die eine Methode einer Klasse eines weiteren Assemblies callen. Nun ist es so, das mich die Callee's von allen Klassen interessieren die ein bestimmtes Interface implementieren. Alles Klassen heraus zu finden, die dieses spezielle Interface implementieren ist relativ einfach. Nun ist aber das Problem, wie finde ich heraus, wo in diesen Klassen überall die Eingangs erwähnte Methode des anderen Assembly gecalled wird, geht das mit Reflection überhaupt?

03.08.2011 - 13:50 Uhr

Hallo tpW510,

das gehört zu den Grundlagen. Ich würde dir empfehlen dich mit einem C# Buch in diese Programmiersprache einzuarbeiten. Als Anstupser kann ich dir die Methode Contains an einem String Objekt empfehlen.


bool isEqualToken = ((string)myString).Contains("=");

05.07.2011 - 16:43 Uhr

Über den newFrame-Event wird bei jedem neuen Bild das der videosourceplayer erhällt eine Algorithmus zur Bildbearbeitung ausgefürt.

Die Aktualisierung von zwei Labels (2x Invoke nacheinander) kann nicht zu einem Deadlock führen

Ich denke wenn man 2 Labels 100 mal in der Sekunde updated dann kann das schon zu einem deadlock führen. Weil wie ich schon erwähnt habe Invoked er die sachen immer, und checked nicht mit einem flag ob das Label sowieso schon visible ist. Das Visible Flag selber darf er ja nicht abfragen da auch lesende Zugriffe auf GUI Elemente außerhalb des GUI Threads vermieden werden sollten.

Dennoch gebe ich ujr recht, das es eventuell noch eine andere Ursache für das Verhalten geben wird, als nur die beiden Label Invokations. Bezüglich der vielen verschiedenen Delegaten, schau dir auch mal Action delegate (.Net 4.0) bzw. das Func<T, TResult> (.Net 4.0) an.

05.07.2011 - 14:37 Uhr

Ob das nur 2-3 mal geändert wird ist die eine Frage, jedoch so wie ich das sehe, machst du trotzdem nach jedem Frame ein GUI zugriff via Invoke. Was dann dort drin passiert, bzw. ob dort in dem delegaten überhaupt was passiert ist eine andere Frage, aber die MessageQueue müllst du dennoch voll!

05.07.2011 - 13:48 Uhr

Hallo dodoflash,

und willkommen im Forum.

Ich vermute mal du knallst die Windows MessageQueue voll. Das heißt du Invokes zu viel, und der GUI Thread ist ständig damit beschäftigt die GUI Zugriffe auszuführen. Versuch mal mit BeginInvoke statt Invoke zu arbeiten, bzw. solltest du dir überlegen, ob es Sinnvoll ist die UI so oft upzudaten. Das kann das menschliche Auge gar nicht wahrnehmen 😄 Ich denke all 10 Frames reicht auch zu.

06.06.2011 - 10:46 Uhr

Ist das ein gemounteder Drive? Weil wenn ja, dann versteh ich überhaupt nicht, warum die Datei nicht siehst. Hast du mal versucht mit DirectoryInfo das root des Drives zu holen, und zu schauen ob das bei Exist true zurück liefert?

06.06.2011 - 10:09 Uhr

Hallo hypersurf,

Folgendes funktioniert übrigens tadellos:

   
FileInfo fi = new FileInfo(pFilename);  
  

Das funktioniert auch mit Files die nicht existieren. An der FileInfo gibt es allerding auch eine Property Exist, kannst du mal prüfen ob die auf true steht in deinem Fall?

17.05.2011 - 09:52 Uhr

Hi elasius,

hast du schon mal auf Code Project geschaut?

16.05.2011 - 10:55 Uhr

Richtig, der Ausdruck ist falsch, deiner ist besser, mann kann die Gruppierung sogar noch weg lassen.

15.05.2011 - 12:21 Uhr

Hallo,

ich würde dann aber den Ausdruck nehmen.


Regex regex = new Regex(@"[(0[7-9])|10]");

12.05.2011 - 09:27 Uhr

Hallo herbivore,

die Idee ist gut, nicht mal allzu aufwendig. Ich hab jetzt auch mal folgendes probiert. Das satellite Assembly mit einem HexEditor geöffnet und nach den Texten gesucht. Diese dann geändert, jedoch an der Länge des Files nichts geändert. Das funzt zumindest schon mal ohne probleme, wie entwicklungszwecke ist das schon mal brauchbar.

Deine Lösung hätte allerdings den Charme das man die resorucen beliebig ändern kann. Ich versuch mal was zusammen zu basteln und stelle es dann zur Verfügung. Ich würde natürlich gleich ne Art Editor funktion dazu bauen, wo es hinten dann wieder raus purzelt.

11.05.2011 - 11:04 Uhr

Da ich das immer noch brauche noch mal die Frage ob eventuell einer eine Idee hat wie ich das machen könnte.

07.05.2011 - 11:10 Uhr

Das sieht interessant aus. Hat das CodeCompare eine offene Schnittstelle? Daher kann ich das teil programmatisch nutzen, daher automatisieren. Ich glaub ich schau mir mal die Visual Studio Integration mit dem Relfector an, eventuell kann ich das dann irgendwie nutzen.

05.05.2011 - 16:06 Uhr

Danke für die vielen Hinweise, ich denke wie Herbivore bereits erwähnt hat führt das vom hundertsten ins tausendste. Ich schau mal wieweit das den Rahmen sprengt, aber das mit den Binaries vergleichen klingt auch interessant. Problem allerdings dabei ist das nicht jedes File einem Assembly zugeordnet ist.

05.05.2011 - 11:13 Uhr

Ja das wäre eine Idee. Wenn man nun aber einen Variablenname Ändert hat sich am Sourcecode ja eigentlich auch nix geändert, zumindest am resultierenden Assembly. Deswegen suchte ich nach einer Art sourcecode Token Generator bei dem die Kommentare, Variablenname etc. egal sind. Aber soetwas scheint es nicht zu geben, oder ich habs nur noch nicht gefunden.

Die einfachere Variante mit den Kommentaren ist zwar leicht umsetztbar (Danke für den Lösungsvorschlag) aber leider nicht wirklich allgemein gültig für mein Problem. Hab wahrscheinlich vergessen zu erwähnen das dass resultierende Kompilat entscheidend ist.

05.05.2011 - 09:27 Uhr

Aber dann muss ich wieder per Hand alle Differenzen auswerten, und schauen ob das auch "SourceCode" beteiligt ist. Das wird ziemlich schwierig, daher wenn zum Beispiel jemand nur einen Buchstaben in einer Xml doku zu ner Methode geändert hat, dann bekommt man nur die Differenz des einen Buchstabens und "mann" muss dann raus finden in welchem Kontext sich diese Änderung befindet.

Ich dachte eher an sowas wie den Code in eine Zwischensprache zu übersetzten, dies mit beiden Files machen, und wenn sich nix am SourceCode geändert hat, dann müssten auch die beiden Zwischensprachen "identisch" sein. Ich denke sowas muss es doch schon geben, schließlich macht der Compiler etwa das selbe beim Übersetzen, den Code in eine IL zu wandeln, oder z.b. CloneDetective beim detektieren der CodeClone.

Das Problem daran ist, das es nicht auf der .NET Ebene arbeiten darf, daher ich habe z.b. nur ein File, zum bauen jedoch braucht dieses File mehrere andere. Diese sind zur Ermittlung der Sourcecodeänderung aber nicht verfügbar. Es muss rein auf "tokens" basieren.

05.05.2011 - 09:01 Uhr

Mit source Kontrolle hat das nix zu tun, daher die Files stehen bereits unter einem Source Kontroll System. Ich will lediglich heraus finden ob sich von einer Version zu einer anderen etwas am source Code geändert hat. Daher sind xml und Komentare etc. nicht zu beachten.

05.05.2011 - 07:53 Uhr

Hallo zusammen,

ich habe folgendes Problem. Ich möchte feststellen ob sich an einem File der sourcecode geändert hat, daher wenn sich kommentare oder xml dokumentation ändert, dann hat sich ja der Sourcecode nicht geändert, das heißt dies soll ignoriert werden.

Eventuell gibt es ein Tool/plugin/dll mit dem man Sourcecode in tokens zerlegen kann um dann die Tokens zu vergleichen. Händisch wollte ich da nicht ran, weil das doch ein wenig viel Aufwand ist alles selber zu parsen...

15.04.2011 - 09:08 Uhr

Hallo mogel,

ich tippe mal darauf das auch folgendes passiert ist/kann. Deine schleife sieht wie folgt aus.


for (int i = nPlayer - 1; i > 0; i--)

Wann nun nPlayer mal eins ist, dann läuft die schleife von 0- 2 x Int32.MaxValue.

13.04.2011 - 14:24 Uhr

Ich hab mich jetzt was gefunden mit dem es funktioniert. Hier der ResourceSet source mit dem man einfach ResourceSet's erstellen kann.


string[] names = assembly.GetManifestResourceNames();
foreach (string name in names)
{
    Stream stream = assembly.GetManifestResourceStream(name);
    System.Resources.MyResourceSet rs = new System.Resources.MyResourceSet(stream);
}

Der code für MyResourceSet mit dem es funktioniert ist hier zu finden.

13.04.2011 - 13:40 Uhr

Hallo,

ich hab ein Problem und bin bisschen am verzweifeln weil ich es einfach nicht gelöst bekomme. Ich hab auch schon im Forum gesucht, auch einiges dazu gefunden leider nix was mir weiter hilft.

Vorhaben: Ich möchte aus einer Satellite Assembly alles resource strings extrahieren. Wenn ich die SA in den Reflector rein ziehen, und auf resources gehe, dann sind dort 6 manifest resources drin, wobei jede mehrere Elemente enthält. Daher allein die Tatsache das es der Reflector hin bekommt die zu extrahieren, lässt vermuten das es gehen muss!

Die Satellite Assembly liegt in der Englischen kultur vor, und das System ist auch auf englisch eingestellt.

Nun lade ich also die Satellite Assembly und möchte gern die Resourcen extrahieren. Zur Sicherheit, nicht das es doch nur an der falschen Kultur liegt, lade ich das ResourceSet mit allen Kulturen die auf dem Rechner da sind.
ps: Ich habe am Anfang natürlich immer nur die CultureInfo.CurrentUICulture genommen bzw. Thread.CurrentThread.CurrentUICulture aber das hat auch nicht funktioniert. Einzig um den Fakt auszuschließen, das es doch an der falschen Kultur liegt, iteriere ich über alle Kulturen.


Assembly assembly = Assembly.LoadFile(@"D:\....dll");
string[] resourceNames = assembly.GetManifestResourceNames();
foreach (string resourceName in resourceNames)
{
    ResourceManager resourceManager = new ResourceManager(resourceName, assembly);
    CultureInfo[] infos = CultureInfo.GetCultures(CultureTypes.AllCultures);
    foreach (CultureInfo info in infos)
    {
        ResourceSet set = resourceManager.GetResourceSet(info, true, false);
        if (set != null)
        {
            Console.Write("resource set found");
        }
    }
}

Ich lande leider NIE im set != null code block, daher das ResourceSet ist immer null. Nun hab ich mir gedacht vielleicht liegt es daran das der ManifestResourceName noch gewandelt werden muss weil

The root name of the resource. For example the root name for the resource file named "MyResource.en-US.resources" is "MyResource" (Tooltip help of first parameter)

Bei mir ist der Resource Manifest Name wie folgt. Namesapce.en.resources. Daher habe ich folgendes versucht:


....
ResourceManager resourceManager = new ResourceManager(Program.GetResourceName(resourceName), assembly);
....

public static string GetResourceName(string resourceName)
{
    return Regex.Replace(resourceName, @"\.\w{2}\.resources", string.Empty);
}

Auch das hilft nicht, ich bekomme immer ein leeres Resource Set zurück. Weiß einer von euch Rat?

11.04.2011 - 21:08 Uhr

Hallo F.Z.

und willkommen hier im Forum. Du musst schon ein wenig Eigeninitiative ins Spiel bringen, sonst können und werden wir dir auch nicht helfen. An was genau scheiterst du denn jetzt genau? Wo liegt dein Problem?

14.03.2011 - 08:06 Uhr

Hallo thinkJD,

wie synchronisierst du denn deine Listen Zugriffe? Daher zeig mal bisschen Code von der Klasse die deine ZaehlerAufBand Klasse verwendet. Ich befürchte du synchronisiert dort nämlich nix, und daher kommt es zu einem "Deadlock" bzw. 2 Threads greifen "unkoordiniert" auf die Liste deiner Klasse zu.

Außerdem hast du erwähnt das die Klasse Singleton war jetzt aber nicht mehr ist, kannst du das bitte genauer erklären. Daher hat jeder Thread jetzt eine eigene Liste (ZaehlerAufBand) oder nicht?

10.03.2011 - 22:36 Uhr

Das ergibt irgendwie keinen Sinn. Erst schreibst du

Ich finde die DLL aber nicht. Unter welchem Register sollte es zu finden sein? dann wiederum schreibst du aber
ich habe es mit gacutil <pfad> installiert. Dabei kam auch die Meldung, dass es erfolgreich war.

Dann kennst du den Pfad der Assembly doch, also kannst du sie doch ohne Problem über Add References zu deinem Projekt hinzufügen.

07.03.2011 - 08:17 Uhr

Wie meine Vorredner bereits erwähnt haben ist das Sache deines UserControls. Daher entweder du setzt es über Properties oder über öffentliche Methoden am UserControl.

23.02.2011 - 09:43 Uhr

Hallo JAck30lena,

@rollerfreak2: die Idee war Sinnfrei. ToString() erzeugt einen neuen String aus dem Stringbuilder.... also wozu dann noch den Stringbuilder wenn man vor jeder Operation ohnehin einen komplett neuen String erzeugt und dort dann Contains macht?

Das ist richtig, aber mehrfach muss man das ToString() nicht aufrufen, einmal reicht ja.

Ich finde allerdings die Regex Variante sowieso am "schönsten", und sie wird m.E. auch die schnellste sein.

@Stryder
Mit was du gemessen hast würde mich auch interessieren!

23.02.2011 - 08:02 Uhr

Am StringBuilder gibt es, wie an jeden anderen Object auch, die ToString() Methode an der du dann wiederrum das Contains aufrufen kannst. Aber wie gesagt, du solltest prüfen ob das am Ende dann performater ist!