stackoverflowからの質問を無料で翻訳することをお勧めします。 私はMSDNから何か(ほとんどロシア語版からの切り抜き)、ブログから何かを取りました。
私たち全員、C#開発者は、基本的なC#コマンドを知っています。 宣言、条件、ループ、演算子などを意味します。
ジェネリック 、
匿名型 、
ラムダ 、
linqなどについて知っている人もいます。
しかし、ファンや専門家でさえ常に知っているとは限らない、C#の本当に秘密の機能やコツは何ですか?
キーワード
Michael Stumによる
yield
反復子ブロックで使用され、列挙子オブジェクトの値を提供したり、反復の終了を報告したりします。
yield return <expression>; yield break ;
var
by
Michael Stum 。 変数を宣言します
var index;
using()
statement by
kokos。IDisposableオブジェクトが正しく使用されることを保証する便利な構文を
提供します 。
using (System.IO.StreamReader sr = new System.IO.StreamReader(@"C:\Users\Public\Documents\test.txt"))
{
string s = null;
while((s = sr.ReadLine()) != null)
{
Console.WriteLine(s);
}
}
readonly
by
kokos。readonlyキーワードは、フィールドに使用できる修飾子です。 フィールド宣言に読み取り専用修飾子が含まれる場合、そのようなフィールドへの値の割り当ては、宣言の一部として、または同じクラスのコンストラクターでのみ発生します。
class Age
{
readonly int _year;
Age(int year)
{
_year = year;
}
void ChangeYear()
{
//_year = 1967; // Compile error if uncommented.
}
}
マイク・ストーンによるas
/
エド・スワングレンによるas
/
is
(改善)
Rocketpantsによって
deathofratsによる
default
global::
by
pzycoman 。文脈依存グローバルキーワードが
ステートメントの前にある場合、グローバル名前空間を参照しますが、これはC#プログラムのデフォルト名前空間であり、他の名前は付けられていません。
class TestClass : global::TestApp { }
volatile
by
JakubŠturc。volatileキーワードは、同時に実行されている複数のスレッドによってフィールドを変更できることを示します。 volatileと宣言されたフィールドは、コンパイラーによる最適化に合格しません。コンパイラーは、別のストリームを介したアクセスを提供します。 これにより、フィールドで最も関連性の高い値が常に利用可能になります。
class VolatileTest
{
public volatile int i;
パブリックボイドテスト(int _i)
{
i = _i;
}
}
JakubŠturcによる
extern alias
。場合によっては、同じ完全な型名を持つアセンブリの2つのバージョンを参照する必要があります。 たとえば、1つのアプリケーションでアセンブリの2つ以上のバージョンを使用する必要があります。 外部アセンブリエイリアスを使用すると、このエイリアスで指定されたルートレベルの名前空間内のラッパーに各アセンブリの名前空間を含めることができます。これにより、単一ファイルでそれらを使用できます。
/r:GridV1=grid.dll
/r:GridV2=grid20.dll
ここで、外部エイリアスGridV1およびGridV2が作成されます。 これらのエイリアスをプログラムで使用するには、externキーワードを使用してそれらにリンクします。 例。
externエイリアスGridV1;
externエイリアスGridV2;
GridV1 :: Gridはgrid.dllのグリッドコントロールであり、GridV2 :: Gridはgrid20.dllのグリッドコントロールです。
属性
Michael Stumによる
DefaultValue
パラメータのデフォルト値を設定するための属性。
DannySmurfによる ObsoleteAttribute
:
使用 ObsoleteAttribute
れなくなったプログラム要素をマークします。
Stuによる
DebuggerDisplayAttribute
:デバッガー変数のウィンドウでのクラスまたはフィールドの表示方法を定義します。
DebuggerBrowsable
。 デバッガー変数のウィンドウにメンバーを表示する方法と存在を決定します。
DebuggerStepThrough
by
bdukes 。 DebuggerStepThroughAttributeクラスを定義します。 このクラスは継承できません。
marxidadの ThreadStaticAttribute
:静的フィールドの値が各スレッドに固有であることを示します。
Martin Clarkeの FlagsAttribute
:列挙をフラグのセットであるビットフィールドとして扱うことができることを示します。
[SerializableAttribute]
[AttributeUsageAttribute(AttributeTargets.Enum, Inherited = false)]
[ComVisibleAttribute(true)]
public class FlagsAttribute : Attribute
AndrewBurnsによる
ConditionalAttribute構文
??
オペレーターby
kokos .Operator ?? これは、値NULLをサポートする演算子と呼ばれ、参照値タイプと同様に、NULL値タイプのデフォルト値を決定するために使用されます。 NULLでない場合は左のオペランドを返し、それ以外の場合は右のオペランドを返します。
class NullCoalesce
{
static int? GetNullableInt()
{
return null;
}
静的文字列GetStringValue()
{
nullを返します。
}
静的ボイドメイン()
{
// ?? 演算子の例。
int? x = null;
// y = x。ただし、xがnullの場合、y = -1。
int y = x ?? -1;
//メソッドの値を返すようにiを割り当てます
//戻り値はnullです。この場合、assign
// intのデフォルト値はiです。
int i = GetNullableInt()?? デフォルト(int);
string s = GetStringValue();
// ?? 参照型でも機能します。
// sのコンテンツを表示します。sがnullでない限り、
//この場合、「指定なし」を表示します。
Console.WriteLine(s ?? "Unspecified");
}
}
Nick Berardiによる番号の
報告Decimal = M
Float = F
Double = D
//たとえば
ダブルd = 30D;
キースによる1パラメーターラムダ
x => x.ToString() //simplify so many calls
キースによる自動プロパティ
Public int MyId { get; private set; }
キースによる名前空間エイリアス
using web = System.Web.UI.WebControls;
using win = System.Windows.Forms;
web :: Control aWebControl = new web :: Control();
win :: Control aFormControl = new win :: Control();
Patrickによる@を使用した逐語的な文字列リテラル
"c:\\program files\\oldway"
@"c:\program file\newway"
(@文字は特殊文字を除外するのに役立ちます)
lfoustによる
enum
値。
enum
はint値を持つ必要はありません。
public enum MyEnum : long
{
Val1 = 1,
Val2 = 2
}
任意の数値を列挙型にキャストできます。
MyEnum e = (MyEnum)123;
marxidadの event
演算子:イベントキーワードを
使用して、パブリッシャークラスでイベントを宣言します。
public class SampleEventArgs
{
public SampleEventArgs(string s) { Text = s; }
public String Text {get; private set;} // readonly
}
public class Publisher
{
// Declare the delegate (if using non-generic pattern).
public delegate void SampleEventHandler(object sender, SampleEventArgs e);
//イベントを宣言します。
パブリックイベントSampleEventHandler SampleEvent;
//保護された仮想メソッドでイベントをラップします
//派生クラスがイベントを発生できるようにします。
保護された仮想ボイドRaiseSampleEvent()
{
//()演算子を使用してイベントを発生させます。
SampleEvent(これ、新しいSampleEventArgs( "Hello"));
}
}
ポートマンによる
文字列括弧のフォーマットxanadontによる
プロパティアクセサアクセシビリティ修飾子JasonSによる
三項演算子( :?
) 。 状態? first_expression:second_expression;
Binoj Antonyによる
checked
およびunchecked
演算子
言語機能
Brad Barkerによる
Nullable型Nullable型は、
System.Nullable(T)構造のインスタンスです。 null許容型は、その基本値型とオプションのnull値の値の正しい範囲を表すことができます。 たとえば、「NULL-Int32型」と呼ばれるNullableの場合、-2,147,483,648〜2,147,483,647またはnullの任意の値を割り当てることができます。
演算子を使用します
か?? 現在のnull値を持つnull許容型がintなどのnull許容型に割り当てられるときに使用されるデフォルト値を割り当てる x = null; int y = x ?? -1;
ブライアンリーヒーによる
カレーキースによる
匿名型匿名型は、最初に型を明示的に決定することなく、読み取り専用プロパティのセットを単一のオブジェクトにカプセル化する便利な方法を提供します。 型名はコンパイラーによって作成され、ソースコードレベルでは使用できません。 プロパティのタイプは、コンパイラによって推測されます。 次の例は、AmountとMessageという2つのプロパティで初期化される匿名型を示しています。
var v = new { Amount = 108, Message = "Hello" };
__makeref __reftype __refvalue
by
Judah Himangolomaxxによる
オブジェクト初期化子 C#3.0の新規性の1つ...そのような置換を行うことができます。
Person p = new Person() {FirstName="John",LastName="Doe",Phone="602-123-1234",City="Phoenix"};
つまり、コンストラクターを使用せずにプロパティを定義します。
marxidadによる
拡張メソッド拡張メソッドを使用すると、新しい派生型を作成、再コンパイル、または元の型を変更せずに、既存の型にメソッドを「追加」できます。 拡張メソッドは特別な種類の静的メソッドですが、拡張型のインスタンスメソッドであるかのように呼び出されます。 C#とVisual Basicで記述されたクライアントコードの場合、拡張メソッドの呼び出しと、実際に型で定義されているメソッドの呼び出しに目に見える違いはありません。
class ExtensionMethods2
{
静的ボイドメイン()
{
int [] ints = {10、45、15、39、21、26};
var result = ints.OrderBy(g => g);
foreach(結果の変数i)
{
System.Console.Write(i + "");
}
}
}
//出力:10 15 21 26 39 45
Jon Ericksonによる
partial
メソッド 2つ以上のソースファイル間で
クラスまたは
構造 、
インターフェイス、またはメソッドの定義を分割することができます。 各ソースファイルにはタイプまたはメソッドの定義が含まれており、アプリケーションのコンパイル時にすべての部分が結合されます。
public partial class Employee
{
public void DoWork()
{
}
}
パブリック部分クラスEmployee
{
public void GoToLunch()
{
}
}
John Asbeckによる
C#プリプロセッサディレクティブこのようなブロックで定義された
Robert Durgin #if debug -codeによる
DEBUG
プリプロセッサディレクティブは、デバッグ中にのみ実行されます。 開発時に例外のより詳細な結論を引き出すと便利です。
SefBknによる
オペレーターのオーバーロード 。
ロブ・ゴフによって
次のレベルに引き上げられたブール演算子
Visual Studioの機能
DannySmurfの スニペット Visual Studio開発環境には、「コードスニペット」と呼ばれる機能が含まれています。 コードスニペットは、すぐにコードに挿入できる既製のコードスニペットです。 たとえば、forコードスニペットは空のforループを作成します。 いくつかのコードが取り囲んでいます。 最初にコード行を選択し、次に選択した行が含まれるコードを選択できるようにします。 たとえば、必要なコード行を選択してforコードフラグメントをアクティブにすると、forループブロックが作成され、その中に選択されたコード行があります。 コードスニペットにより、プログラムの作成が高速化され、簡素化され、このプロセスの信頼性が向上します。
私見からテンプレートを試すことができます
。
枠組み
KiwiBastardの TransactionScope
:コードブロックをトランザクション化します。 このクラスは継承できません。
Mutex
by
Mutex
System.IO.Path
by
ageektrapped。ファイルまたはディレクトリのパス情報を含むStringクラスのインスタンスで操作を実行します。 これらの操作はクロスプラットフォームで実行されます。
WeakReference
by
Juan Manuel 。オブジェクトを指すがガベージコレクターが削除できるように
WeakReference
弱いリンクを
WeakReference
ます。
メソッドとプロパティ
String.IsNullOrEmpty()
メソッド:指定された
Stringオブジェクトがnull(Visual BasicではNothing)か
空の文字列かを示します。
List.ForEach()
メソッド
using System;
using System.Collections.Generic;
クラスプログラム
{
静的ボイドメイン()
{
リスト<String>名=新しいリスト<String>();
names.Add( "Bruce");
names.Add( "Alfred");
names.Add( "Tim");
names.Add( "Richard");
//「Print」デリゲートを使用してリストの内容を表示します。
names.ForEach(印刷);
//以下は、Cの匿名デリゲート機能を示しています#
//リストの内容をコンソールに表示します。
names.ForEach(デリゲート(文字列名)
{
Console.WriteLine(名前);
});
}
private static void Print(string s)
{
Console.WriteLine(s);
}
}
/ *このコードは、次のような出力を生成します。
*ブルース
*アルフレッド
*ティム
*リチャード
*ブルース
*アルフレッド
*ティム
*リチャード
* /
Will Deanによる
BeginInvoke()
、
EndInvoke()
メソッド
Nullable<T>.HasValue
および
Nullable<T>. Value
Rismoによる
Nullable<T>. Value
プロパティ
John Sheehanの GetValueOrDefault
メソッド現在のNullable(T)オブジェクトの値または指定されたデフォルト値を取得します。
ヒントとコツ
ジョンによる
大文字の比較 。 「C#を介したCLR」という本に基づいて、Microsoftは大文字比較のためにコードを最適化しました(たとえば、小文字ではありません)。
ダンカンスマートによる
LINQBridgeJoel Coehoornによる
Parallel Extensionsレポートでは、Parallel FX 2008 CTPの主要コンポーネントについて説明し、Parallel FXの使用例を紹介しています。
©
PSコードの書式設定は非常に軽smされましたが、Habrは何かを聞きたくありません=(私の
ブログでは、すべてがほぼ正しく表示されています。