Edited at

【C#】拡張メソッド書き溜め


この記事について

拡張メソッドの備忘録、兼、共有のための記事です。

この記事は、追記したり、グルーピングしたり、常に編集するつもりです。

2019.1.9 ContainsDuplicate() , GetDuplicateArray() を追記


区切り文字を含むstring文字列を、List形式にする


改行コードで分割したList形式にする

複数文字列で文字列を分割する場合は、この形式


Extensions.cs

static class Extensions

{
private static string[] stringCRLFSeparator = { "\r\n", "\n\r", "\r", "\n" };
public static List<string> SplitCRLF(this string listString)
{
return listString
.Split(stringCRLFSeparator , StringSplitOptions.RemoveEmptyEntries)
.ToList();
}
}

参考:【C#入門】String.Splitで文字列を分割(複数文字、文字数でも分割)

参考:下記のsoiさんのコメント(2018/8/29) // 記法をコンパクト化

参考:下記のalbireoさんのコメント(2018/8/31) // 分割文字列をstaticにしてnewを廃止


カンマで分割したList形式にする

1文字で文字列を分割する場合は、この形式(char)


Extensions.cs

static class Extensions

{
private static char[] stringCommaSeparator = { ',' };
public static List<string> SplitComma(this string listString)
{
return listString
.Split(stringCommaSeparator, StringSplitOptions.RemoveEmptyEntries)
.ToList();
}
}

参考:下記のsoiさんのコメント(2018/8/29) // 記法をコンパクト化

参考:下記のalbireoさんのコメント(2018/8/31) // 分割文字列をstaticにしてnewを廃止


※リストとしても配列としても使いたい場合

戻り値の型を「IList<string>」にし、拡張メソッド内でList型に変換していた「ToList()」を削除


Extensions.cs

static class Extentions

{
private static char[] stringCommaSeparator = { ',' };
public static IList<string> SplitComma(this string listString)
{
return listString
.Split(stringCommaSeparator, StringSplitOptions.RemoveEmptyEntries);
}
}

// 使い方
string sampleString = "view,viewmodel,model";
string[] array = sampleString.SplitComma().ToArray(); // 配列にしたい場合は、呼び出し側で .ToArray()を付ける
List<string> list = sampleString.SplitComma().ToList(); // リストにしたい場合、呼び出し側で .ToList()を付ける


参考:下記のalbireoさんのコメント

参考:2つの文字列が等しいかを調べる 大文字小文字、半角全角、ひらがなカタカナの区別をしないで文字列を比較する


Listに、大文字小文字を区別しないContains()関数を付ける

List

string[]

Dictionary.Keys (string型のKey)

Dictionary.Values (string型のValue)

など、どれでも使用可能です。


Extensions.cs

static class Extensions

{
public static bool ContainsIgnoreCase(this IEnumerable<string> list, string target)
{
foreach (string obj in list)
{
if (String.Compare(obj, target, true) == 0)
{
return true;
}
}
return false; // 見つからなかった
}
}

参考:大文字/小文字を区別しないで文字列を比較するには?

参考:下記のalbireoさんのコメント(2018/8/31) thisの型をIEnumerableに変更


CollectionにAddRange()を追加する


Extensions.cs

static class Extensions

{
public static void AddRange<T>(this ICollection<T> collection, ICollection<T> target)
{
foreach (var item in target)
{
collection.Add(item);
}
}
}

ObservableCollectionに、AddRange()を使いたかった...。

参考:なにか参考にした気がするのですが、失念しました。


リスト内に重複があるかチェックする

参考にしたサイトのかたの見解では、パフォーマンスに問題あるので、ご利用は計画的にとのことです。


Extensions.cs

static class Extensions

{
public static bool ContainsDuplicate(this IEnumerable<string> source)
{
return source.GroupBy(i => i).SelectMany(g => g.Skip(1)).Any();
}
}

参考:【C#】 コレクションの重複をチェックする


コレクションの中から重複している要素を返す

重複している要素が複数あるかも知れないので、List形式で返します。


Extensions.cs

static class Extensions

{
public static IEnumerable<string> GetDuplicateArray(this IEnumerable<string> source)
{
return source.GroupBy(i => i).SelectMany(g => g.Skip(1));
}
}

参考:たぶん、上のContainsDuplicate()を作った時に、.Any() を削除してみて作ったのだと思います。