【C#】C#チートシート

自分用メモ。随時更新。
C#関連の忘れやすいことを書いていきます。

フルパスをAssetPathに変換する

var matchAssetPath     = System.Text.RegularExpressions.Regex.Match(fullPath, "Assets/.*");
var assetPath           = matchAssetPath.Value;

Enumerable.ToLookup()

キーを指定してルックアップテーブルを作成する(Linq)。

using System.Collections;
using System.Collections.Generic;
using System.Linq;

public class Sample {

    public struct SampleStruct
    {
        public int groupId;
        public string name;
    }
    
    public void Main () {
        var list = new List<SampleStruct>{
            new SampleStruct{ groupId = 1, name = "Sample01" },
            new SampleStruct{ groupId = 1, name = "Sample02" },
            new SampleStruct{ groupId = 1, name = "Sample03" },
            new SampleStruct{ groupId = 2, name = "Sample04" },
            new SampleStruct{ groupId = 2, name = "Sample05" },
            new SampleStruct{ groupId = 2, name = "Sample06" },
            new SampleStruct{ groupId = 1, name = "Sample07" },
            new SampleStruct{ groupId = 2, name = "Sample08" },
            new SampleStruct{ groupId = 3, name = "Sample09" },
        };
        // ToLookup()を使う
        var lookup = list.ToLookup(ks => ks.groupId);
        foreach (var item in lookup[1]) {
            System.Console.WriteLine(item.name); // Sample01, Sample02, Sample03, Sample07
        }
    }
}

Enumに値が定義されているか確認する

System.Enum.IsDefined()を使うと指定した値(int)がEnumの要素として定義されているか確認できる。

public class Sample {

    public enum SampleEnum
    {
        One = 1,
        Two = 2,
    }
    
    public void Main () {
        // System.Enum.IsDefined()を使う
        System.Enum.IsDefined(typeof(SampleEnum), 0); // false
        System.Enum.IsDefined(typeof(SampleEnum), 1); // true
    }
}

IEnumerableのデフォルト値を変更したい

IEnumerable.DefaultIfEmpty()を使う

var dic = new Dictionary<int, string>();
dic.DefaultIfEmpty(new KeyValuePair<int, string>(-1, "default")).FirstOrDefault();