コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【C#】登録されているデリゲートの数を返す拡張メソッド

ソースコード using System; public static class MulticastDelegateExtensions { public static int GetLength( this MulticastDelegate self ) { if ( self == null || self.GetInvocationList() == null ) { return 0; } return self.GetInvocationList()…

【C#】 リストの末尾から指定された数の要素を削除する拡張メソッド

ソースコード using System; using System.Collections.Generic; public static class ListExtensions { public static void DropRight<T>( this List<T> self, int count ) { self.RemoveRange( self.Count - count, count ); } } 使い方 var list = new List<string> { "</string></t></t>…

【C#】リストの先頭から指定された数の要素を削除する拡張メソッド

ソースコード using System; using System.Collections.Generic; public static class ListExtensions { public static void Drop<T>( this List<T> self, int count ) { self.RemoveRange( 0, count ); } } 使い方 var list = new List<string> { "フシギダネ", "フシギソ</string></t></t>…

【C#】最小値を持つ要素を返す拡張メソッド

ソースコード using System; using System.Collections.Generic; using System.Linq; public static class IEnumerableExtensions { public static TSource MinBy<TSource, TResult>( this IEnumerable<TSource> source, Func<TSource, TResult> selector ) { var value = source.Min( selector ); return </tsource,></tsource></tsource,>…

【C#】最大値を持つ要素を返す拡張メソッド

ソースコード using System; using System.Collections.Generic; using System.Linq; public static class IEnumerableExtensions { public static TSource MaxBy<TSource, TResult>( this IEnumerable<TSource> source, Func<TSource, TResult> selector ) { var value = source.Max( selector ); return </tsource,></tsource></tsource,>…

【C#】文字列内の改行文字を削除した文字列を返す拡張メソッド

ソースコード public static class StringExtensions { /// <summary> /// 文字列内の改行文字を削除した文字列を返します /// </summary> public static string RemoveNewLine( this string self ) { return self.Replace( "\r", "" ).Replace( "\n", "" ); } } 使い方 var str…

【C#】Dictionary からランダムにキーや値を取得する拡張メソッド

ソースコード using System; using System.Collections.Generic; using System.Linq; public static class DictionaryExt { private static Random m_random; private static Random random => m_random ?? ( m_random = new Random() ); public static KeyV…

【C#】リスト内に指定された要素があるか調べて存在する場合はその要素をリストから削除する拡張メソッド

ソースコード using System; using System.Collections.Generic; public static class ListExtensions { /// <summary> /// <para>リスト内に指定された要素があるか調べて</para> /// <para>存在する場合はその要素をリストから削除します</para> /// </summary> public static void Remove<T>( this List<T> se</t></t>…

【C#】配列内の要素を複数キーでソートする拡張メソッド

ソースコード using System; using System.Collections.ObjectModel; public static class ArrayExtensions { /// <summary> /// 配列内の要素を複数キーでソートします /// </summary> public static void Sort<TSource, TResult>( this TSource[] array, Func<TSource, TResult> selector1, Func<TSource, TResult> selector2 ) where</tsource,></tsource,></tsource,>…

【C#】Dictionary から指定したキーの要素を削除する前に関数を呼び出す拡張メソッド

ソースコード using System; using System.Collections.Generic; public static class DictionaryExtensions { /// <summary> /// 指定したキーを持つ値を削除します。 /// 削除前に指定された関数を呼び出します /// </summary> public static void Remove<TKey, TValue>( this Dictionary<TKey, TValue> se</tkey,></tkey,>…

【C#】指定されたいずれかの文字列を含むかどうかを返す拡張メソッド

ソースコード using System; using System.Linq; public static class StringExtensions { public static bool IncludeAny( this string self, params string[] list ) { return list.Any( c => self.Contains( c ) ); } } 使い方 var str = "ピカチュウカイ…

【C#】条件を満たす場合にのみリストに要素を追加する拡張メソッド

ソースコード using System.Collections.Generic; public static class ListExtensions { public static void AddIfTrue<T>( this List<T> self, bool condition, T item ) { if ( !condition ) { return; } self.Add( item ); } } 使い方 var list = new List<int>(); </int></t></t>…

【C#】List を指定されたパラメータでソートできるようにする拡張メソッド

ソースコード using System; using System.Collections.Generic; public static class ListExtensions { public static void Sort<TSource, TResult>( this List<TSource> self, Func<TSource, TResult> selector ) where TResult : IComparable { self.Sort( ( x, y ) => selector( x ).CompareTo( select</tsource,></tsource></tsource,>…

【C#】Dictionary にキーが存在する場合にのみ関数を呼び出す拡張メソッド

ソースコード using System; using System.Collections.Generic; public static class DictionaryExtensions { /// <summary> /// 指定されたキーが格納されている場合は指定された関数を呼び出します /// </summary> public static void SafeCall<TKey, TValue>( this Dictionary<TKey, TValue> self, TKey </tkey,></tkey,>…

【C#】文字列を指定された回数連結して返す拡張メソッド

ソースコード using System.Text; public static class StringExtensions { /// <summary> /// 指定された文字列を指定された回数連結して返します /// </summary> public static string Repeat( this string self, int repeatCount ) { var builder = new StringBuilder(); for…

【C#】配列やリストの中から指定した範囲の要素を抜き出す

ソースコード using System.Collections.Generic; using System.Linq; public static class IEnumerableExtensions { /// <summary> /// シーケンスの中から指定した範囲の要素を抜き出す /// </summary> /// <param name="pageNumber">現在のページ番号</param> /// <param name="countPerPage">1 ページあたりに表示する項目の数</param> public sta…

【C#】配列やリストから目的の値に最も近い値を取得する拡張メソッド その2

ソースコード using System; using System.Collections.Generic; using System.Linq; public static class IEnumerableExtensions { #region Nearest /// <summary> /// 目的の値に最も近い値を返します /// </summary> public static int Nearest( this IEnumerable<int> self, int </int>…

【C#】配列やリストから目的の値に最も近い値を取得する拡張メソッド

参考サイト様 差し替え・Minで目的の値に最も近い値を選ぶ 【▲→川俣晶の縁側→技術関連執筆情報→『【省エネ対応】 C#プログラムの効率的な書き方 LINQ to Objects マニアックス』読者サポート】 ソースコード using System; using System.Collections.Generic…

【C#】配列やリストから最小値もしくは最大値を持つ要素を検索する拡張メソッド

ソースコード using System; using System.Collections.Generic; using System.Linq; public static class IEnumerableExtensions { /// <summary> /// 最小値を持つ要素を返します /// </summary> public static TSource FindMin<TSource, TResult> ( this IEnumerable<TSource> self, Func<TSource, TResult> selector ) { r</tsource,></tsource></tsource,>…

【C#】1つのオブジェクトが複数のオブジェクトのいずれかと等しいか判定する拡張メソッド

概要 【C#】1つの文字列が複数の文字列のいずれかと等しいか判定する拡張メソッド - コガネブログ 以前、指定した1つの文字列が複数の文字列のいずれかと等しいかどうかを判定する 拡張メソッドを公開しましたが、文字列以外の型でも使えるジェネリック版を…

【C#】Dictionaryに既に指定したキーが存在する場合は何もしないAdd関数の拡張メソッド

ソースコード using System.Collections.Generic; /// <summary> /// Dictionary 型の拡張メソッドを管理するクラス /// </summary> public static class DictionaryExtensions { /// <summary> /// <para>指定したキーと値をディクショナリに追加します</para> /// <para>指定したキーが既に格納されている</para></summary>…

【C#】配列やリストを逆順に処理する拡張メソッド

はじめに var array = new []{ 1, 2, 3, 4, 5 }; for ( int i = array.Length - 1; 0 <= i; i-- ) { Debug.Log( array[ i ] ); // 5 // 4 // 3 // 2 // 1 } 配列やリストを末尾から処理したい場合、上記のようなループ構文を書きますが for ( int i = array.…

【C#】 数値を加算して、範囲を超えた分は 0 からの値として処理して返す拡張メソッド

ソースコード /// <summary> /// int 型の拡張メソッドを管理するクラス /// </summary> public static class IntExtensions { /// <summary> /// 数値を加算して、範囲を超えた分は 0 からの値として処理して返します /// </summary> public static int Repeat(this int self, int value, int max)…

【C#】指定した型の基底クラスの情報をすべて取得する拡張メソッド

ソースコード using System; using System.Collections.Generic; /// <summary> /// Type 型の拡張メソッドを管理するクラス /// </summary> public static class TypeExtensions { /// <summary> /// 指定された Type の継承元であるすべての型を取得します /// </summary> public static IEnumera…

【C#】リストの先頭にあるオブジェクトを削除して返す拡張メソッド

ソースコード using System; using System.Collections.Generic; /// <summary> /// IList 型の拡張メソッドを管理するクラス /// </summary> public static class IListExtensions { /// <summary> /// 先頭にあるオブジェクトを削除し、返します /// </summary> public static T Dequeue<T>(this ILi</t>…

【C#】Dictionary型の指定したキーに値が存在しない場合はデフォルト値を返す拡張メソッド

ソースコード using System.Collections.Generic; /// <summary> /// Dictionary 型の拡張メソッドを管理するクラス /// </summary> public static class DictionaryExtensions { /// <summary> /// 指定したキーに関連付けられている値を取得します。 /// キーが存在しない場合は既定値</summary>…

【C#】文字列から特定の文字列をすべて削除する拡張メソッド

ソースコード /// <summary> /// string 型の拡張メソッドを管理するクラス /// </summary> public static class StringExtensions { /// <summary> /// 指定した文字列をすべて空文字列に置換した新しい文字列を返します /// </summary> /// <remarks> /// "ABCABC".ReplaceEmpty("B") → ACAC /// </remarks> public s…

【C#】float型を安全に比較する拡張メソッド

ソースコード using UnityEngine; /// <summary> /// float 型の拡張メソッドを管理するクラス /// </summary> public static class FloatExtensions { /// <summary> /// 指定のオブジェクトが現在のオブジェクトと等しいかどうかを判断します /// </summary> public static bool SafeEquals ( thi…

【C#】数値に指定された桁数の固定小数点数を付加した文字列を返す拡張メソッド

ソースコード using System; /// <summary> /// int 型の拡張メソッドを管理するクラス /// </summary> public static class IntExtensions { /// <summary> /// 数値に指定された桁数の固定小数点数を付加した文字列を返します /// </summary> /// <remarks> /// 123.FixedPoint(2) → 123.00 /// 123.FixedP</remarks>…

【C#】単語の先頭文字を大文字に変換する拡張メソッド

ソースコード public static class StringExtensions { public static string ToTitleCase(this string self) { return System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(self); } } 使い方 "getName()".ToTitleCase(); // "GetName()"…