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

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

C#でコンストラクタから引数の違うコンストラクタを実行する方法

C#でコンストラクタから引数の違うコンストラクタを実行する方法を調べてみました。

using System;

public class T
{
  public T()
  {
    Console.WriteLine("T");
  }
  public T(int a)
  {
    Console.WriteLine("T: a=" + a);
  }
  public T(int a, string b) : this(a)
  {
    Console.WriteLine("T: b=" + b);
  }
}

public class Example
{
  static public void Main ()
  {
    T t1 = new T();
    T t2 = new T(10);
    T t3 = new T(123, "text");
  }
}

実行結果

T
T: a=10
T: a=123
T: b=text

thisの代わりにbaseを使うことで基底クラスのコンストラクタを実行することもできるみたいです。

リンク

Using Constructors (C# Programming Guide) | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/using-constructors

C#の配列でPythonのmapのような操作

Pythonを使っているとmapというリストの操作が便利です。

>>> a = list(range(5))
>>> a
[0, 1, 2, 3, 4]
>>> list(map(lambda e: e*2+1, a))
[1, 3, 5, 7, 9]

C#でもこれと同じようなことができないかと探してみたところ、LINQのSelectを使って同じような感じのコードが書けるみたいです。

using System;
using System.Linq;

public class Example
{
  static public void Main ()
  {
    int[] a = new int[]{ 0, 1, 2, 3, 4 };
    a = a.Select(e => e * 2 + 1).ToArray();
    foreach(int v in a) {
      Console.WriteLine(v);
    }
  }
}

実行結果

1
3
5
7
9

リンク

ruby – C# Array Map/Collect – Stack Overflow
https://stackoverflow.com/questions/2285496/c-sharp-array-map-collect

C#の自作クラスでforeachを使う

C#の自作クラスでforeachを使いたい場合はGetEnumeratorというメソッドを追加してみれば良いようです。

public class Example : MonoBehaviour
{
  public IEnumerator<string> GetEnumerator()
  {
    yield return "A";
    yield return "B";
    yield return "C";
  }
}

こんな感じにすると、

Example example = new Example();

foreach(string s in example) {
  Debug.log(s);
}

のように使えます。

リンク

How to use foreach keyword on custom Objects in C# – Stack Overflow
https://stackoverflow.com/questions/348964/how-to-use-foreach-keyword-on-custom-objects-in-c-sharp