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

55voto

Binoj Antony Punkte 15610

Weitere wenig genutzte Operatoren sind checked y unchecked :

short x = 32767;   // 32767 is the max value for short
short y = 32767;
int z1 =  checked((short)(x + y));   //will throw an OverflowException
int z2 =  unchecked((short)(x + y)); // will return -2
int z3 =  (short)(x + y);            // will return -2

6 Stimmen

Anstelle von 32767 und einem Kommentar, wie wäre es mit short.MaxValue ?

25 Stimmen

Ich wollte nur daran erinnern, was der genaue Maximalwert ist!

0 Stimmen

Vielleicht sollten wir "32767" als Höchstwert für eine Kurzbezeichnung als versteckte Spracheigenschaft aufführen? (Ich denke, es ist eine versteckte Programmiererethik, die Zahl hart zu codieren)

48voto

Jon Skeet Punkte 1325502

Ein paar versteckte Funktionen, die ich entdeckt habe:

  • stackalloc mit der Sie Arrays auf dem Stack zuweisen können
  • Anonyme Methoden ohne explizite Parameterliste, die implizit in jeden Delegatentyp mit Nicht-Out/Ref-Parametern konvertierbar sind (sehr praktisch für Ereignisse, wie in einem früheren Kommentar erwähnt)
  • Viele Leute sind sich nicht bewusst, was Ereignisse wirklich sind (ein Paar von Methoden zum Hinzufügen/Entfernen, wie get/set für Eigenschaften); feldartige Ereignisse in C# deklarieren wirklich sowohl eine Variable y ein Ereignis
  • Die == y != Operatoren können überladen werden, um andere Typen zurückzugeben als bool . Seltsam, aber wahr.
  • Die Übersetzung von Abfrageausdrücken in C# 3 ist in mancher Hinsicht wirklich "einfach" - was bedeutet, dass man sie dazu bringen kann, einige sehr merkwürdige Dinge .
  • Nullable-Typen haben ein spezielles Boxing-Verhalten: ein Null-Wert wird zu einer Null-Referenz geboxt, und man kann auch von Null auf den nullable-Typ unboxen.

1 Stimmen

Leider, stackalloc erfordert einen unsicheren Kontext.

48voto

Himadri Punkte 8042

Ich wollte nur den Code ohne die Kommentare kopieren. Der Trick ist also, einfach die Alt-Taste zu drücken und dann das gewünschte Rechteck zu markieren (z. B. unten).

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        //if (e.CommandName == "sel")
        //{
        //    lblCat.Text = e.CommandArgument.ToString();
        //}
    }

Wenn ich im obigen Code die Option :

e.CommandName == "sel"

lblCat.Text = e.Comman

Dann drücke ich die ALt-Taste und wähle das Rechteck aus, ohne dass ich die Linien auskommentieren muss.

Sehen Sie sich das an.

2 Stimmen

Interessante Funktion von Visual Studio, aber die Frage bezieht sich auf C#.

11 Stimmen

+1 Es gibt einen Abschnitt "Visual Studio Features" in dieser Frage, wo Ihre Antwort perfekt passt.

0 Stimmen

Es funktionierte auch einfach durch Drücken der Alt-Taste. Sie müssen nicht Alt drücken und halten.

46voto

Jakub Šturc Punkte 33925

Die flüchtig Schlüsselwort, um dem Compiler mitzuteilen, dass ein Feld von mehreren Threads gleichzeitig geändert werden kann.

18 Stimmen

Hey, das ist nicht ganz richtig. Das Schlüsselwort "volatile" weist den Compiler an, bei jedem Lesen eines Feldes einen "acquire-fence" und bei jedem Schreiben in das Feld einen "release-fence" zu erzeugen. Ein Acquire-Fence verhindert, dass andere Lese-/Schreibvorgänge vor dem Fence verschoben werden; ein Release-Fence verhindert, dass andere Lese-/Schreibvorgänge nach dem Fence verschoben werden. Lesen Sie hier mehr: bit.ly/hycbVI

46voto

Konamiman Punkte 48557

@David in Dakota:

Console.WriteLine( "-".PadRight( 21, '-' ) );

Früher habe ich dies getan, bis ich entdeckte, dass die String-Klasse einen Konstruktor hat, mit dem man das Gleiche auf sauberere Weise tun kann:

new String('-',22);

0 Stimmen

Warum nicht wie folgt vorgehen Console.WriteLine( "".PadRight( 22, '-' ) );

0 Stimmen

Um zum Beispiel kürzeren und saubereren Code zu erhalten.

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