1473 Stimmen

Versteckte Eigenschaften von C#?

Dies kam mir in den Sinn, nachdem ich folgendes erfahren hatte diese Frage :

where T : struct

Wir, die C#-Entwickler, kennen alle die Grundlagen von C#. Ich meine Deklarationen, Konditionale, Schleifen, Operatoren usw.

Einige von uns beherrschten sogar die Dinge wie Generika , anonyme Typen , lambdas , LINQ , ...

Aber was sind die versteckten Funktionen oder Tricks von C#, die selbst C#-Fans, -Süchtige und -Experten kaum kennen?

Hier sind die bisher enthüllten Funktionen:

Schlüsselwörter

Attribute

Syntax

  • ?? (Koaleszenz-Nullen) Operator durch kokos
  • Nummerierung der Markierungen durch Nick Berardi
  • where T:new par Lars Mæhlum
  • Implizite Generika durch Keith
  • Ein-Parameter-Lambdas durch Keith
  • Auto-Eigenschaften von Keith
  • Namespace-Aliase von Keith
  • Verbatim-String-Literale mit @ durch Patrick
  • enum Werte von lfoust
  • @variablennamen von marxidad
  • event Betreiber von marxidad
  • Formatieren von String-Klammern durch Portman
  • Modifikatoren für die Zugänglichkeit der Eigenschaft accessor durch xanadont
  • Bedingter (ternärer) Operator ( ?: ) durch JasonS
  • checked y unchecked Betreiber von Binoj Antony
  • implicit and explicit Betreiber von Flory

Sprachliche Merkmale

Visual Studio-Funktionen

Rahmenwerk

Methoden und Eigenschaften

  • String.IsNullOrEmpty() Methode von KiwiBastard
  • List.ForEach() Methode von KiwiBastard
  • BeginInvoke() , EndInvoke() Methoden von Will Dean
  • Nullable<T>.HasValue y Nullable<T>.Value Eigenschaften von Rismo
  • GetValueOrDefault Methode von John Sheehan

Tipps und Tricks

  • Nette Methode für Ereignisbehandler von Andreas H.R. Nilsson
  • Vergleiche in Großbuchstaben durch John
  • Zugriff auf anonyme Typen ohne Reflexion durch dp
  • Eine schnelle Möglichkeit, Sammlungseigenschaften zu instanziieren, indem man Will
  • JavaScript-ähnliche anonyme Inline-Funktionen durch roosteronacid

Andere

115voto

nimish Punkte 4440
Environment.NewLine

für systemunabhängige Zeilenumbrüche.

10 Stimmen

Das Ärgerliche daran ist, dass es nicht in den kompakten Rahmen integriert ist.

14 Stimmen

Es sei darauf hingewiesen, dass dies spezifisch für die Host-Plattform der Anwendung ist - wenn Sie also Daten für ein anderes System erstellen, sollten Sie \n o \r\n angemessen.

0 Stimmen

Dies ist Teil der BCL von .NET, nicht eine Funktion von C# an sich.

111voto

Portman Punkte 31245

Wenn Sie versuchen, geschweifte Klammern innerhalb eines String.Format-Ausdrucks zu verwenden...

int foo = 3;
string bar = "blind mice";
String.Format("{{I am in brackets!}} {0} {1}", foo, bar);
//Outputs "{I am in brackets!} 3 blind mice"

19 Stimmen

@Kyralessa: Ja, das sind eigentlich geschweifte Klammern, aber "geschweifte Klammern" ist ein anderer Name für sie. [ y ] sind eckige Klammern, und < y > sind spitze Klammern. Siehe de.wikipedia.org/wiki/Bracket .

4 Stimmen

Sie haben recht. Aber als ich kommentierte, stand da nicht "geschweifte" Klammern.

2 Stimmen

Sehr schön, darauf hinzuweisen. Erinnern Sie sich an meine erste String.Format sah aus wie: String.Format("{0}Ich stehe in geschweiften Klammern{1} {2} {3}", "{","}", 3, "blinde Mäuse"); Als ich herausfand, dass man diese mit {{ und }} Ich war so glücklich :)

104voto

kokos Punkte 41886
  1. ?? - Koaleszenz-Operator
  2. mit ( Anweisung / Richtlinie ) - großartiges Schlüsselwort, das für mehr als nur den Aufruf von Dispose verwendet werden kann
  3. readonly - sollte stärker genutzt werden
  4. netmodules - schade, dass es keine Unterstützung in Visual Studio gibt

0 Stimmen

"using - ein großartiges Schlüsselwort, das für mehr als nur den Aufruf von Dispose verwendet werden kann" Ich bin neugierig, können Sie das näher erläutern?

6 Stimmen

Using kann auch verwendet werden, um einen langen Namespace in einen bequemeren String umzuwandeln, z.B.: using ZipEncode = MyCompany.UtilityCode.Compression.Zip.Encoding; Hier gibt es noch mehr: msdn.microsoft.com/de-us/library/sf0df423.aspx

2 Stimmen

Das ist wirklich nicht das Gleiche. Beim Aufruf von Dispose können Sie die using-Anweisung verwenden, beim Aliasing von Typen verwenden Sie eine using-Anweisung.

103voto

Dogmang Punkte 727

@Ed, ich bin etwas zurückhaltend, dies zu posten, da es kaum mehr als Erbsenzählerei ist. Ich möchte jedoch darauf hinweisen, dass in Ihrem Codebeispiel:

MyClass c;
  if (obj is MyClass)
    c = obj as MyClass

Wenn Sie "ist" verwenden, warum sollten Sie dann einen sicheren Wurf mit "als" folgen lassen? Wenn Sie sich vergewissert haben, dass obj tatsächlich MyClass ist, ein Standard-Cast:

c = (MyClass)obj

...wird niemals scheitern.

Sie könnten auch einfach sagen: "Das ist eine gute Idee:

MyClass c = obj as MyClass;
if(c != null)
{
   ...
}

Ich weiß nicht genug über das Innenleben von .NET, um sicher zu sein, aber mein Instinkt sagt mir, dass dies ein Maximum von zwei Type Casts Operationen auf ein Maximum von einem reduzieren würde. Es ist kaum wahrscheinlich, um die Verarbeitung Bank so oder so zu brechen; persönlich denke ich, die letztere Form sieht auch sauberer.

0 Stimmen

Wissen Sie, ob Sie es glauben oder nicht, die direkte Besetzung ist Langsamer als die eigentliche Besetzung. Ich habe das nicht geglaubt, bis ich es selbst gemessen habe.

16 Stimmen

Wenn der Cast auf den exakten Typ erfolgt (Cast auf "A", wenn das Objekt "A" ist, nicht davon abgeleitet), ist der direkte Cast ~3x SCHNELLER als "as". Beim Casting eines abgeleiteten Typs (Casting nach "A", wenn das Objekt "B" ist, das von "A" abgeleitet ist), ist der Straight Cast ~0,1x langsamer als "as". "is", dann "as" ist einfach dumm.

0 Stimmen

FxCop warnt Sie, wenn Sie ein 'as' in ein 'if is' einfügen.

98voto

JasonS Punkte 22820

Das ist vielleicht keine fortgeschrittene Technik, aber eine, die ich immer wieder sehe und die mich verrückt macht:

if (x == 1)
{
   x = 2;
}
else
{
   x = 3;
}

kann zusammengefasst werden zu:

x = (x==1) ? 2 : 3;

0 Stimmen

Wenn ich mich nicht irre, gibt es das schon seit den frühen Tagen von C++. (Straight C hatte es wahrscheinlich auch, aber ich kann mich nicht erinnern.)

0 Stimmen

"Dies" wird als "ternärer Operator" bezeichnet. de.wikipedia.org/wiki/Ternäre_Operation

10 Stimmen

Der ternäre Operator ist in meiner Gruppe verboten worden. Manche Leute mögen ihn einfach nicht, aber ich habe nie verstanden, warum.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X