2017-08-28 8 views
0

は最近、私はコードベースに出くわしたとどのデータ型がC#にありますか?

var a = 1_23_456; 
Console.WriteLine(a); 

以下のようないくつかのコードを発見した私は、Visual Studio 2015/.NETフィドルでそれを実行しようとしたが、それはコンパイルエラーを得ました。しかし、私がRoslyn 2.0コンパイラを使って再試行したとき、それはコンパイルされて、私に出力123456を与えます。

ここで何が問題になりますか?なぜデータを整数として表示していますか?

+13

これはC#7の機能です。数字をグループ化する方法として、数字に '_'を入れることができます。 VS 2017をコンパイルする必要があります。このブログ記事の「リテラルの改善」を参照してください。 https://blogs.msdn.microsoft.com/dotnet/2017/03/09/new-features-in-c-7-0/ – vcsjones

+0

「Console.WriteLine(a.GetType());」を試してみてください(スポイラ:これは 'int'、AKA' System.Int32') – dasblinkenlight

+0

Btw:[fiddle](https://dotnetfiddle.net/BuljEh)はRoslyn 2.0をサポートしています。 – Sinatr

答えて

4

アンダースコアは数字区切り文字です。それらは大量(特に2進数)を読みやすくするために使用されます。あなたはread about them on MSDNです。

アンダースコアはデータ型を変更しません。次の文はすべて同じデータ型(intや可能System.Int32)と値の結果:

var a = 123456; 
int b = 123456; 
System.Int32 c = 123456; 
var d = 1_23_456; 
int e = 1_23_456; 
System.Int32 f = 1_23_456; 

あなたは離れて取得することができるかもしれませんがあなたは、それをコンパイルするために2017年のVisual Studioで新しいコンパイラが必要になりますusing Visual Studio 2015となります。

+0

ありがとうございました。読みやすさが向上します。数字に数字をグループ化する他の技術的利点はありますか?ちょっと興味があるんだけど。 –

+0

@ NoorAShuvo技術的な利点はありません。特にバイナリや16進数を扱う場合に便利です。 – mason

関連する問題