C#」カテゴリーアーカイブ

プログラミング言語「C#」に関するカテゴリーです。

C#で使える書式指定についての簡単なまとめ

C言語のprintf関数で使えるような書式をC#でも使いたいと思って簡単に調べてみました。

int

サンプル

int value = 1234;

// 普通に表示
Console.WriteLine($"{value}");

// 8文字分のスペースに右揃えで表示
Console.WriteLine($"{value,8}");

// 8文字分のスペースに左揃えで表示
Console.WriteLine($"{value,-8}");

// 足りない部分は0で補って8桁で表示
Console.WriteLine($"{value:D8}");

実行結果

1234
    1234
1234    
00001234

サンプル – 16進表記

int value = 1234;

// 16進表記で表示
Console.WriteLine($"{value:X}");

// 8文字分のスペースに右揃えで表示
Console.WriteLine($"{value,8:X}");

// 8文字分のスペースに左揃えで表示
Console.WriteLine($"{value,-8:X}");

// 足りない部分は0で補って8桁の16進表記で表示
Console.WriteLine($"{value:X8}");

実行結果

4D2
     4D2
4D2     
000004D2

サンプル – 16進表記 その2

小文字の16進表記で表示したい場合はXの代わりにxを使います。

int value = 1234;
Console.WriteLine($"{value:x}");
Console.WriteLine($"{value,8:x}");
Console.WriteLine($"{value,-8:x}");
Console.WriteLine($"{value:x8}");

実行結果

4d2
     4d2
4D2     
000004d2

float

サンプル

float value = 123.4f;

// 普通に小数点表示
Console.WriteLine($"{value:F}");

// 8文字分のスペースに右揃えで小数点表示
Console.WriteLine($"{value,8:F}");

// 8文字分のスペースに左揃えで小数点表示
Console.WriteLine($"{value,-8:F}");

// 小数点以下を8桁で表示
Console.WriteLine($"{value:F8}");

実行結果

123.40
  123.40
123.40  
123.40000000

※精度指定子がない場合はNumberFormatInfo.NumberDecimalDigitsの値によって小数点以下の桁数が決まるそうです。

リンク

$ – string interpolation – C# reference | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated

String interpolation in C# | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/string-interpolation

Standard numeric format strings | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings

C#で配列のサイズを調べる方法

配列のサイズを調べる方法

Lengthを使って配列のサイズを調べることができます。

int[] array1 = new int[]{ 1, 2, 3, 4, 5 };

Debug.Log($"Length = {array1.Length}");

実行結果

Length = 5

ジャグ配列の場合

int[][] array2 = new int[][]{
  new int[] { 1, 2, 3 },
  new int[] { 4, 5, 6, 7 }
};

Debug.Log($"Length = {array2.Length}");
Debug.Log($"Length = {array2[0].Length}");
Debug.Log($"Length = {array2[1].Length}");

実行結果

Length = 2
Length = 3
Length = 4

多次元配列の場合

多次元配列の場合はGetLengthを使って調べられます。

int[,] array3 = new int[,]{
  { 1, 2, 3 },
  { 4, 5, 6 }
};

Debug.Log($"Length = {array3.GetLength(0)}");
Debug.Log($"Length = {array3.GetLength(1)}");

実行結果

Length = 2
Length = 3

C#でoperator[]のオーバーロード

operator[]のオーバーロード

C#で自作クラスにoperator[]を追加したい場合は次のような感じで実装できます。

class Example
{
  int[] _ar = new int[10];                                                                       
  
  public int this[int i]
  {
    get => _ar[i];                                                                        
    set => _ar[i] = value;                                                                       
  }
}

Exampleクラスを使う方は次のような感じです。

var example = new Example();

example[2] = 345;

Debug.Log($"example[2] = {example[2]}");

実行結果

example[2] = 345

多次元配列

多次元配列のような感じで使いたい場合も次のような感じで実装できます。

class Example2
{
  int[,] _ar = new int[10, 10];

  public int this[int i, int j]
  {
    get => _ar[i, j];
    set => _ar[i, j] = value;
  }
}

Compiler Error CS0720

static classoperator[]を実装しようとするとCS0720というエラーになるようです。気を付けてください。

/* static */ class Example3
{
  public int this[int i]
  {
    get => 0;
  }
}

※配列の範囲外にアクセスしようとするとIndexOutOfRangeExceptionという例外が発生します。実際に使う場合は注意してください。