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

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

C#で数値を文字列に変換したり文字列を数値に変換したりする方法

C#で数値を文字列に変換したり文字列を数値に変換したりする方法のまとめ。

数値 ⇒ 文字列の変換

数値から文字列への変換にはToString()が使えます。

サンプルコード

using System;

public class Example1
{
  public static void Main()
  {
    int value1 = 123;
    float value2 = 456.78f;

    Console.WriteLine("value1 = " + value1.ToString());
    Console.WriteLine("value2 = " + value2.ToString());
  }
}

実行結果

value1 = 123
value2 = 456.78

文字列 ⇒ 数値の変換

文字列から数値への変換はParse()が使えます。
例外を発生させたくない場合はTryParse()も使えます。

サンプルコード

using System;

public class Example2
{
  public static void Main()
  {
    try
    {
      int value1 = int.Parse("123");
      float value2 = float.Parse("456.78");

      Console.WriteLine("value1 = " + value1);
      Console.WriteLine("value2 = " + value2);
    }
    catch (FormatException)
    {
    }
  }
}

実行結果

value1 = 123
value2 = 456.78

文字列 ⇒ 数値の変換(TryParse編)

サンプルコード

using System;

public class Example3
{
  public static void Main()
  {
    if (int.TryParse("123", out int value1))
    {
      Console.WriteLine("value1 = " + value1);
    }
    if (float.TryParse("456.78", out float value2))
    {
      Console.WriteLine("value2 = " + value2);
    }
  }
}

実行結果

value1 = 123
value2 = 456.78

リンク

How to convert a string to a number – C# Programming Guide | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/how-to-convert-a-string-to-a-number

C#のtuple型

C#でもPythonなどと同じようにtuple型が使えます。

tuple型の使い方

( ),を使って(1, 2, "abc")のような感じで書くとtuple型になります。
各要素の参照はItem1Item2Item3になります。

サンプル

using System;

public class Example1
{
  static public void Main ()
  {
    var tuple = (1, 2, "abc");
    Console.WriteLine($"{tuple.Item1} {tuple.Item2} {tuple.Item3}");
  }
}

実行結果

1 2 abc

varの部分はValueTuple<int, int, string>と書くこともできます。

Listでtuple型を使いたい場合

Listと組み合わせて使いたい場合は

List<ValueTuple<int, int, string>>

もしくは

List<(int, int, string)>

のようにして使い▽ます。

サンプル

using System;
using System.Collections.Generic;

public class Example2
{
  static public void Main ()
  {
    var list = new List<(int, int, string)>();
    list.Add((1, 2, "abc"));
    list.Add((3, 4, "def"));

    foreach(var tuple in list)
    {
      Console.WriteLine($"{tuple.Item1} {tuple.Item2} {tuple.Item3}");
    }
  }
}

実行結果

1 2 abc
3 4 def

Tuple Class

ValueTupleの方が使い易いと思いますが、これとは別にTuple Classというものもあります。

使い方は次のような感じです。

サンプル

using System;

public class Example3
{
  static public void Main ()
  {
    var tuple = Tuple.Create(1, 2, "abc");
    Console.WriteLine($"{tuple.Item1} {tuple.Item2} {tuple.Item3}");
  }
}

実行結果

1 2 abc

ValueTupleとTuple Classの変換

ValueTupleをTuple Classに変換したい場合は.ToTuple()、Tuple ClassをValue Tupleに変換したい場合は.ToValueTuple()を使って相互に変換できます。

サンプル

using System;

public class Example4
{
  static public void Main ()
  {
    Tuple<int, int, string> tuple1 = (1, 2, "abc").ToTuple();
    ValueTuple<int, int, string> tuple2 = Tuple.Create(3, 4, "def").ToValueTuple();
    
    Console.WriteLine($"{tuple1.Item1} {tuple1.Item2} {tuple1.Item3}");
    Console.WriteLine($"{tuple2.Item1} {tuple2.Item2} {tuple2.Item3}");
  }
}

実行結果

1 2 abc
3 4 def

リンク

Tuple types – C# Guide | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/csharp/tuples

Tuple Class (System) | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/api/system.tuple

C#の配列をコピーする方法

Cloneメソッド

Cloneメソッドを使うと簡単に配列のコピーができます。

使い方は次のような感じです。

using System;

public class Example1
{
  static public void Main ()
  {
    string[] ar1 = { "aaa", "bbb", "ccc" };
    string[] ar2 = (string[])ar1.Clone();

    ar2[0] = "AAA";

    Console.WriteLine("ar1:");
    foreach(var e in ar1) Console.WriteLine(e);
    
    Console.WriteLine("ar2:");
    foreach(var e in ar2) Console.WriteLine(e);
  }
}

実行結果

ar1:
aaa
bbb
ccc
ar2:
AAA
bbb
ccc

多次元配列

多次元配列でも同様にCloneできます。

using System;

public class Example2
{
  static public void Main ()
  {
    string[,] ar1 = { {"aaa", "bbb"}, {"ccc", "ddd"} };
    string[,] ar2 = (string[,])ar1.Clone();

    ar2[0,0] = "AAA";

    Console.WriteLine("ar1:");
    foreach(var e in ar1) Console.WriteLine(e);
    
    Console.WriteLine("ar2:");
    foreach(var e in ar2) Console.WriteLine(e);
  }
}

実行結果

ar1:
aaa
bbb
ccc
ddd
ar2:
AAA
bbb
ccc
ddd

shallow copy

Cloneメソッドは便利ですが、deep copyではなくshallow copyになっている点には注意してください。

using System;

public class C
{
  public string s;
  public override string ToString() => s;
}

public class Example3
{
  static public void Main ()
  {
    C c = new C();
    c.s = "aaa";
	
    C[] ar1 = { c, c };
    C[] ar2 = (C[])ar1.Clone();

    ar2[0].s = "AAA";

    Console.WriteLine("ar1:");
    foreach(var e in ar1) Console.WriteLine(e);

    Console.WriteLine("ar2:");
    foreach(var e in ar2) Console.WriteLine(e);
  }
}

実行結果

ar1:
AAA
AAA
ar2:
AAA
AAA

リンク

Array.Clone Method (System) | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/api/system.array.clone?view=netcore-3.1