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

65voto

Christian Hubmann Punkte 1482

Bedingter String.Format :

Wendet eine unterschiedliche Formatierung auf eine Zahl an, je nachdem, ob die Zahl positiv, negativ oder Null ist.

string s = string.Format("{0:positive;negative;zero}", i);

z.B..

string format = "000;-#;(0)";

string pos = 1.ToString(format);     // 001
string neg = (-1).ToString(format);  // -1
string zer = 0.ToString(format);     // (0)

2 Stimmen

Das ist ähnlich wie bei den reg-Ausdrücken, sehr nützlich, aber ich kann sie mir auch nicht merken. Ich behandle Sachen wie oben mit padleft und padright.

0 Stimmen

Cool, ich wusste gar nicht, dass das möglich ist... Ist das irgendwo dokumentiert?

0 Stimmen

@Thomas: Es ist in MSDN im Abschnitt "The ";" Section Separator" gegen Ende des Themas Custom Numeric Formatting unter dokumentiert: msdn.microsoft.com/de-us/library/0c899ak8.aspx

64voto

Mark Cidade Punkte 95914

Unter der Haube sind Ereignisse in Wirklichkeit Delegierte, und jedes Delegatenobjekt kann mit den Operatoren += und -= mehrere Funktionen an sich binden bzw. von sich lösen.

Ereignisse können auch mit add/remove gesteuert werden, ähnlich wie get/set, außer dass sie aufgerufen werden, wenn += und -= verwendet werden:

public event EventHandler SelectiveEvent(object sender, EventArgs args) 
  { add 
     { if (value.Target == null) throw new Exception("No static handlers!");
       _SelectiveEvent += value;
     }
    remove
     { _SelectiveEvent -= value;
     }
  } EventHandler _SelectiveEvent;

61voto

John Spurlock Punkte 1703

Vergessen Sie nicht siehe .

55 Stimmen

Nein, vergessen wir's. ;)

3 Stimmen

Nein, wir missbrauchen es bis zum Gehtnichtmehr ;)

1 Stimmen

Ja, vergessen Sie es nicht - stellen Sie sicher, dass Sie es vernichten, wenn Sie die Gelegenheit dazu haben!

56voto

Mike Two Punkte 42868

Es handelt sich dabei eher um eine Laufzeitfunktion, aber ich habe kürzlich erfahren, dass es zwei Garbage Collectors gibt. Den Workstation-GC und den Server-GC. Workstation ist der Standard auf Client-Versionen von Windows, aber Server ist viel schneller auf Multicore-Maschinen.

<configuration>
   <runtime>
      <gcServer enabled="true"/>
   </runtime>
</configuration>

Seien Sie vorsichtig. Der Server gc benötigt mehr Speicher.

0 Stimmen

Netter Tipp. Sie sollten diese Frage in die Frage zur versteckten .NET Base Class Library verschieben stackoverflow.com/questions/122784/

0 Stimmen

Fantastisch. Ich habe einen Multicore-Webserver; die zusätzlichen Kerne und der zusätzliche Speicher wurden verschwendet!

0 Stimmen

Diese Optimierung funktioniert bei mir auch mit IronScheme gut :)

55voto

Grokys Punkte 15823

Ich konnte das oben nicht sehen - ich wusste bis vor kurzem nicht, dass man einen Konstruktor von einem anderen aufrufen kann:

class Example
{
    public Example(int value1)
        : this(value1, "Default Value")
    {
    }

    public Example(int value1, string value2)
    {
        m_Value1 = value1;
        m_value2 = value2;
    }

    int m_Value1;
    string m_value2;
}

1 Stimmen

Ich habe das Ding zwar klassenübergreifend eingesetzt, aber nie daran gedacht, es in der gleichen Klasse zu verwenden. Ich habe schon überall nach so etwas gesucht! Toll!

0 Stimmen

Das ist großartig. Ich habe immer verwendet, dass der Aufruf der Basis, aber nie wusste, dass Sie es in der gleichen Klasse verwenden können!

0 Stimmen

Können Sie Jungs Link zu irgendwo zeigt ein Anwendungsbeispiel für diese für Cross-Klasse und Basisklasse?

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