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

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

C#のExtension Method

C#ではExtension Methodという便利な仕組みがあるそうです。

使い方

using System;

public static class Extension
{
  public enum Fruit { apple, orange }

  public static string function(this Fruit fruit)
  {
    return fruit == Fruit.apple ? "apple" : "orange";
  }
}

public static class Example
{
  static void Main()
  {
    string fruit = Extension.function(Extension.Fruit.apple);
    Console.WriteLine("fruit: " + fruit);
  }
}

実行結果

fruit: apple

テキトウ過ぎるexampleですが、thisキーワードを使ってこんな感じで書けるみたいです。enum以外にもclass/struct/primitive valueなどにも使えるそうなので、便利そうな気がします。

リンク

How to: Implement and Call a Custom Extension Method (C# Programming Guide) | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/how-to-implement-and-call-a-custom-extension-method

??演算子(null合体演算子)

C#には??演算子(null合体演算子)という便利な演算子があるそうです。

x ?? y

のようにして、xnullでない場合はxを返し、xnullの場合はyを返す演算子になっています。

使い方はこんな感じです。

using System;

public class Example
{
  static public void Main ()
  {
    int? a = null;
    int? b = 10;
    int x = (a ?? b).Value;
    Console.WriteLine("x = " + x);
  }
}

実行結果

x = 10

これまで?:演算子で

int x = ((a != null) ? a : b).Value;

のようにしていたのが簡単に書けるみたいです。

リンク

C# 演算子 | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/

C#のgeneric methodでnullをreturnする方法

C#のgeneric methodでnullreturnしたい場合はdefaultというのを使って、次のようにできるみたいです。

return default(T);

Genericsでいろいろしたい場合に役立ちそうです。

リンク

How can I return NULL from a generic method in C#? – Stack Overflow
https://stackoverflow.com/questions/302096/how-can-i-return-null-from-a-generic-method-in-c