はじめに
ネットで、C#
in句
で検索すると、以下のものが見つかります。
しかし満足できなかったので自分用のスニペットを作成しました。
- https://takap-tech.com/entry/2019/11/21/235109
- https://dk521123.hatenablog.com/entry/30276314
- https://mk.hatenablog.jp/entry/20100706/1278379175
- https://www.kazukiio.com/entry/2019/01/29/000919
サンプルコード
サンプルコードを見ていただければ一目瞭然ですが、Contains()
があれば別に In()
など要らない気がします。
まあ、でも可読性のために欲しくなるケースもあるでしょう。
using System;
using System.Linq;
namespace InTest
{
static class Ext
{
public static bool In<T>(this T source, params T[] list)
{
return list.Contains(source);
}
}
class Program
{
static void Main(string[] args)
{
if (5.In(1, 2, 3, 4, 5)) Console.WriteLine("Match!");
var productName = "Macbook Air";
var appleProducts = new string[] { "Macbook Air", "Macbook Pro", "Mac mini", "iMac" };
if (productName.In(appleProducts)) Console.WriteLine("Match!");
}
}
}
// #error version -> コンパイラ バージョン: '3.7.0-6.20371.12 (917b9dfa)'。言語バージョン: default。
// いや、default ってなんや。
正規表現版
正規表現と組み合わせると、存在意義が少し向上するような気がします。
using System;
using System.Linq;
using System.Text.RegularExpressions;
namespace InByRegexTest
{
static class Ext
{
public static bool In(this string source, params string[] patterns)
{
return patterns.Any(pattern => Regex.IsMatch(source, pattern));
}
}
class Program
{
static void Main(string[] args)
{
string productName = "Macbook Air";
string[] appleProductPatterns = new string[] {
"[m|M]ac.*",
"iPhone[0-9]*",
"Apple TV [4K|HD]",
};
if (productName.In(appleProductPatterns)) Console.WriteLine("Match!");
if ("iPhone12".In(appleProductPatterns)) Console.WriteLine("Match!");
if ("Apple TV 4K".In(appleProductPatterns)) Console.WriteLine("Match!");
}
}
}