Folgendes Muster ist ausreichend, die Engine ist schlau genug um zu erkennen, dass die curly brackets nicht zu einem Quantifizierer gehören.
Der Stern ist ungenau, oder willst du auch "{}"? Beliebig viele Zahlen ist für mich 1 bis n, also das Plus.
\d ist natürlich das gleiche wie [0-9] aber IMHO klarer.
{\d+}
Integer-Operationen sind ganze Zahlen. Du kannst nicht 1 lebende Kuh zwischen 3 Bauern aufteilen.
Klar kann man das, dann hat man eben keine (0) lebende Kuh.
PS: OK der Joke war so gedacht. ^^ brauch nochmal Wochenende
Häufig ist es nicht sinnvoll eine generische Methode zu schreiben und diese dann per Reflection aufzurufen. Oft kann man das gleiche mit object erreichen, ohne viel ändern zu müssen.
Generics sind eine Hilfe für die Compile-Time, d.h. wenn man den Code eintippt. Steht der Typ zu dieser Zeit nicht fest, machen sie wenig Sinn.
PS:
Ausnahmen bestätigen hier natürlich die Regel. 😉
Du kannst LINQ gegen alles benutzen, was IEnumerable implementiert und es ist unglaublich flexibel. Ich könnte mir sowas vorstellen:
var q = from trx in TransactionMonitoring.TransactionList.Values
where trx.Ended.HasValue
let duration = trx.Ended.Value - trx.Started
group duration by trx.Caller;
foreach (var grouping in q)
{
Console.WriteLine("{0}: {1}", grouping.Key, grouping.Average(x => x.Milliseconds));
}
Median gibt es direkt nicht, du kannst dir aber eine eigene Extension-Method schreiben. Ist nicht sehr schwer.
Das ganze ist wohl hochgekeimt, weil das Entity Framework eben genau den gleichen weg wie diese Bohnen geht. Viele Entwickler würden lieber sehen, dass das EF auch POCOs persistieren kann, was -- AFAIK -- nicht möglich ist.
resharper-standard einstellung.
Dito.
Eingerückt mit 4 Spaces. Früher habe ich immer Tabs genommen, aber mittlerweile bin ich überzeugt, dass Spaces wesentlich praktischer sind.
PS:
Für XML/XAML habe ich mich irgendwie in ein neuen Stiel verliebt, jede Eigenschaft in eine neue Zeile (kann man in VS auch einstellen). Ist allerdings eher exotisch, glaube ich. Das sieht dann so aus:
<Menu x:Name="mainMenu"
DockPanel.Dock="Top">
<MenuItem Header="Database">
<MenuItem Header="Compress"
Command="local:Commands.CompressDatabase" />
</MenuItem>
<MenuItem Header="Help" />
</Menu>
Hi,
InvokeRequired aus WinForms-Zeiten ist was anderes als der WPF-Dispatcher. Man muss also etwas umdenken. Der Dispatcher verwaltet mehrere Warteschlagen mit unterschiedlichen Prioritäten, und alle Aktionen in WPF werden über ihn abgewickelt. Insofern kann man ihn wunderbar benutzen um kleine Aktionen (oder kleine Häppchen einer großen) auf dem GUI-Thread durchzuführen.
Wenn man nun aus einem richtigen Thread auf die GUI zugreifen will, kann man das auch über den Dispatcher machen:
Man holt sich den Dispatcher der GUI (nicht des Workerthreads, sprich Dispatcher.Current im Worker wird nicht funktionieren) und kann dort seine Aktion per BeginInvoke (oder Invoke) ausführen.
Hi,
es gibt zugar eine Code Metric, also eine Maßeinheit für die Qualität des Codes, die sich nach der Anzahl der gemeinsamen Felder richtet (Lack of Cohesion in Methods). Von daher sollten Methoden, die sich keine Felder der Klasse teilen, in andere Klassen überführt werden oder statisch gemacht werden (viele Hilfsfunktionen sind so). Wenn du nun die lokalen Variablen eine Methode als Felder deklarierst, machst du diese Metric kaputt. 🙂
Sollte eine Variable möglichst auch gleich instantiiert werden
Microsoft.CSharp.CSharpCodeProvider cSharp = new Microsoft.CSharp.CSharpCodeProvider();oder sollte die Deklaration und Instatiierung getrennt erfolgen, damit z.B. die Zeilen nicht zu lang werden?
Im Gegensatz zu früher sollte man Variablen erst dann deklarieren und initialisieren wenn man sie braucht. Eine getrennte Deklaration macht man nur dann Sinn, wenn man sie wirklich brauch (häufig sowas wie: int a; if(x) a = 5; else a = 42; a++).
Wenn dir diese Zeile zu lang ist:
using Microsoft.CSharp; // :)
using CSCP = Microsoft.CSharp.CSharpCodeProvider; // Alias für die Klasse
var cSharp = new Microsoft.CSharp.CSharpCodeProvider(); // Mit C# 3 Compiler
und wenn ich richtig liege, dann werden BackgroundWorker in dem Standard ThreadPool gestartet und dieser ist auf 25 Threads "gleichzeitig" beschränkt.
Zur Vollständigkeit: Es sind 25 Threads pro CPU/Core. Ändern kann man das mit ThreadPool.SetMaxThreads().
Jetzt wo du fragst ... Darüber hab ich noch garnicht nachgedacht.
Keine Ahnung, ob Generics bei Valuetypen Boxing auslöst oder nicht.
Da muss ich bei Gelegenheit mal nachforschen (jetzt hab ich leider keine Zeit).
Mir gings genauso. Musste auch erstmal schnell einen kleinen Test machen. 🙂
Wie schon von winSharp93 so halb gesagt:
Die Runtime erzeugt zur Lauftzeit den entsprechenden Code, wenn sie auf einen neuen, noch nicht generierten TType trifft, von daher passiert das auch mit Wertetypen.