.NET / C#5.0はどのように見えますか?

ごく最近、.NET / C#4.0のリリースを受け取りました。 新しいプラットフォームと言語の新機能と革新について多くのことを話しました(そして、もっと話します)。 しかし、あなたはすでにいくつかの結論を導き出し、.NET / C#5.0の新しいバージョンで何を見たいと思うか?


タプルのパッケージ化と展開


4.0では、この方法で使用できる新しいTupleデータ型が登場しました。

var data = new Tuple < string 、 int > ( “ John Doe”、 42 ) ;

Tupleを短縮形で使用することは素晴らしいことでした。例えば:

パブリック 文字列 、 int 、 double ReturnMyTuple ( )
{
「Hello World!」を 返す 、 42、4.2 ;
}

または

public Tuple < string 、 int 、 double > ReturnMyTuple ( )
{
「Hello World!」を 返す 、 42、4.2 ;
}

//他の場所:item1は文字列、item2はint、item3はdoubleです。
var item1、item2、item3 = ReturnMyTuple ( ) ;

列挙型、ジェネリック


列挙型をジェネリックメソッドに渡すと便利です。次に例を示します。
public void DoSomething < T > ( T enum )ここで、T : システム 。 列挙型 { ... }

また、enumクラスを作成することもできます(現在Javaにあるように)。

汎用メソッドに演算子サポートを追加してみませんか?
T追加< T > ( Ta、T b )
{
a + bを返し ます。
}

キーワードと範囲内


変数が特定のセットまたは値の範囲にあるかどうかを確認する簡単な方法:
if ( x in ( 1、2、3 ) ) { }

if ( x in [ 5..10 ] ) { }

if ( x in [ 1、2、4..8、10 ] ) { }

拡張プロパティ


彼自身は、拡張メソッドに加えて、拡張プロパティもなぜ不思議に思ったのか。 つまり 代わりに
var value = someObject。 値 ( ) ;

書くのは簡単です
var value = someObject。 価値

スマートスイッチ


式、条件などをサポートするようにスイッチを拡張しましょう。
スイッチ ( anInt )
{
ケース 1、2 :
コンソール WriteLine ( "1 or 2" ) ;
休憩;
ケース 3..9 :
コンソール WriteLine ( "3 to 9" ) ;
休憩;
case > = 10 :
コンソール WriteLine ( "10 or higher" ) ;
休憩;
デフォルト :
...
}

スイッチ ( aString )
{
ケース 「1」 、 「2」 :
コンソール WriteLine ( "1 or 2" ) ;
休憩;
ケース 「3」 :
コンソール WriteLine ( "3" ) ;
休憩;
デフォルト :
...
}

スイッチ ( aString )
{
ケースの IsNullOrEmpty ( ) :
...
ケースの 長さ > 100 :
...
ケースの 含む ( "foo" ) :
...
}


ところで、VB.NETはこの構文をサポートしています。

列挙型の自動フラグ


基本的に、良いアイデア:
[フラグ]
パブリック 列挙型 MyFlags
{
値1 、 // 1
値2 、 // 2
ValueCombining1And2 = Value1 | Value2、 // 3
Value3、 // 4
Value4、 // 8
ValueCombining3And4 = Value3 | 値4 // 12
}

より高度なヌルチェック


多くの場合、オブジェクトのプロパティのプロパティを使用する必要があります。これにより、多数のチェックが行われます。 次のようにしないでください:
MyClass値= null ;
int something = value。 x 。 y ??? 0 ; //ここでトリプル文字を使用できますか?
//何かが0になりました

または、たとえば、代わりに
var obj = Foo ( ) ;
バー値= null ;
if ( obj。Bar != null && obj。Bar。Something != null )
{
値= obj。 バー 何か 。 DoSomething ( ) ;
}

書く
var obj = Foo ( ) ;
var value = obj ? 。 バー ? 。 何か ? 。 DoSomething ( ) ;

例外のグループ化


さて、このようなもの:
試してみる
{
}
catch ( ArgumentOutOfRangeException )
catch ( ArgumentNullException )
{
// ArgumentOutOfRangeExceptionまたはArgumentNullExceptionをキャッチします
}


同様のことを今すぐ行うことができますが、重要な順に必要な例外を処理し、残りすべてを処理するには-一般的な例外を使用します。

もっと...


多重継承、仮想拡張メソッド、長い名前を持つファイルを処理する機能... stackoverflowでこの問題の議論に参加できます。

.NET / C#5.0で何を見たいですか?また、上記のアイデアのどれを使用しますか?

Source: https://habr.com/ru/post/J94182/


All Articles