コガネブログ

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

【C#】二次元配列を回転させる拡張メソッド

はじめに 上記サイト様が公開されているプログラムを参考に 二次元配列を回転させる拡張メソッドを作成しました ソースコード public static class ArrayExt { // 時計回りに 90 度回転 public static T[,] RotateClockwise<T>( this T[,] self ) { int rows = </t>…

【C#】文字列から数値を抽出する拡張メソッド

ソースコード using System.Text.RegularExpressions; public static class StringExt { public static int ExtractInteger( this string self ) { return int.Parse( Regex.Replace( self, @"[^0-9]", string.Empty ) ); } } 使い方 var str1 = "s012"; Con…

【C#】高速な列挙型の API を使用できる「FastEnum」紹介

はじめに 「FastEnum」をプロジェクトに追加することで 高速な列挙型の API を使用できるようになります インストール Visual Studio メニューの「ツール>NuGet パッケージ マネージャー> ソリューションの NuGet パッケージの管理」を選択します 「参照」タ…

【C#】高速な LINQ を使用できる「FastLinq」紹介

はじめに 「FastLinq」をプロジェクトに追加することで 高速な LINQ を使用できるようになります インストール Visual Studio メニューの「ツール>NuGet パッケージ マネージャー> ソリューションの NuGet パッケージの管理」を選択します 「参照」タブを選…

【C#】配列やリストの分解代入を可能にする Deconstruct

ソースコード using System.Collections.Generic; using System.Linq; public static class IListExt { public static void Deconstruct<T> ( this IList<T> self, out T first, out IList<T> rest ) { first = self.Count > 0 ? self[ 0 ] : default; rest = self.Sk</t></t></t>…

【C#】配列やリストの foreach で簡単にインデックスを取得できる拡張メソッド

ソースコード using System; using System.Collections.Generic; public static class IEnumerableExt { public static IEnumerable<(int index, T value)> WithIndex<T> ( this IEnumerable<T> source ) { if ( source == null ) { throw new ArgumentNullExcepti</t></t>…

【C#】可変長引数を使用できる Enumerable.Concat

ソースコード using System.Collections.Generic; using System.Linq; public static class IEnumerableExt { public static IEnumerable<T> Concat<T> ( this IEnumerable<T> first, params T[] second ) { return Enumerable.Concat( first, second ); } } 使用例 </t></t></t>…

【C#】シーケンスの要素を条件を満たすものと満たさないものに分ける拡張メソッド

ソースコード using System; using System.Collections.Generic; public static class IEnumerableExt { public static Tuple<IEnumerable<T>, IEnumerable<T>> Partition<T> ( this IEnumerable<T> self, Func<T, bool> predicate ) { var ok = new List<T>(); var ng = new List<T>(); foreach ( v</t></t></t,></t></t></t></ienumerable<t>…

【C#】SelectMany( c => c ) の記述を簡略化する拡張メソッド

ソースコード using System.Collections.Generic; using System.Linq; public static class IEnumerableExt { public static IEnumerable<T> Flatten<T> ( this IEnumerable<IEnumerable<T>> self ) { return self.SelectMany( c => c ); } } 使用例 通常 foreach ( var n in list</ienumerable<t></t></t>…

【C#】Dictionary から指定したキーの要素を取得してから削除する拡張メソッド

ソースコード using System.Collections.Generic; public static class DictionaryExt { public static bool Remove<TKey, TValue> ( this Dictionary<TKey, TValue> self, TKey key, out TValue value ) { self.TryGetValue( key, out value ); return self.Remove( key ); } } 使用方法</tkey,></tkey,>…

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

ソースコード System.Random 版 using System; using System.Collections.Generic; using System.Linq; public static partial class IEnumerableExt { private static readonly Random m_random = new Random(); public static T RandomAt<T>( this IEnumerable<T></t></t>…

【C#】高速な LINQ を使用できる「LinqFaster」紹介

はじめに 「LinqFaster」をプロジェクトに追加することで 高速な LINQ を使用できるようになります インストール Visual Studio メニューの「ツール>NuGet パッケージ マネージャー> ソリューションの NuGet パッケージの管理」を選択します 「参照」タブを…

【C#】文字列がすべて小文字かどうかを判定する拡張メソッド

ソースコード public static class StringExt { public static bool IsLower( this string self ) { for ( int i = 0; i < self.Length; i++ ) { if ( char.IsUpper( self[ i ] ) ) { return false; } } return true; } } 使い方 var str = "abcde"; var isL…

【C#】文字列がすべて大文字かどうかを判定する拡張メソッド

ソースコード public static class StringExt { public static bool IsUpper( this string self ) { for ( int i = 0; i < self.Length; i++ ) { if ( char.IsLower( self[ i ] ) ) { return false; } } return true; } } 使い方 var str = "ABCDE"; var isU…

【C#】string から一行目だけ取得する拡張メソッド

ソースコード using System; using System.Linq; public static class StringExt { public static string GetFirstLine( this string self ) { var separator = new [] { Environment.NewLine }; return self .Split( separator, StringSplitOptions.None ) …

【C#】指定されたバイト数で文字列を分割して返す拡張メソッド

ソースコード using System.Collections.Generic; using System.Text; public static class StringExt { /// <summary> /// 指定されたバイト数で文字列を分割して返します /// </summary> public static IList<string> SplitByMultiByte( this string self, int count ) { var result =</string>…

【C#】Stopwatch で経過時間を読みやすい形式で出力できる拡張メソッド

ソースコード using System; using System.Diagnostics; public static class StopwatchExt { /// <summary> /// yyyy/MM/dd HH:mm:ss 形式の文字列に変換して返します /// </summary> public static string ToPattern( this Stopwatch self ) { return new DateTime( self.Elap…

【C#】パフォーマンスに優れた列挙型を使用できる「Enums.NET」紹介

はじめに 「Enums.NET」をプロジェクトに追加することで パフォーマンスに優れた列挙型を使用できるようになります インストール Visual Studio メニューの「ツール>NuGet パッケージ マネージャー> ソリューションの NuGet パッケージの管理」を選択します …

【C#】LINQ で使用できる拡張メソッドが増える「Linq.Extras」紹介

はじめに 「Linq.Extras」をプロジェクトに追加することで LINQ で使用できる拡張メソッドが増えます インストール Visual Studio メニューの「ツール>NuGet パッケージ マネージャー> ソリューションの NuGet パッケージの管理」を選択します 「参照」タブ…

【C#】LINQ を使用して Excel からデータを抽出できる「LinqToExcel」紹介

はじめに 「LinqToExcel」をプロジェクトに追加することで LINQ を使用して Excel からデータを抽出できるようになります インストール Visual Studio メニューの「ツール>NuGet パッケージ マネージャー> ソリューションの NuGet パッケージの管理」を選択…

【C#】LINQ で使用できる検索用の拡張メソッドが増える「SearchExtensions」紹介

はじめに 「SearchExtensions」をプロジェクトに追加することで LINQ で使用できる検索用の拡張メソッドが増えます インストール Visual Studio メニューの「ツール>NuGet パッケージ マネージャー> ソリューションの NuGet パッケージの管理」を選択します …

【C#】DateTime で使用できる拡張メソッドが増える「Exceptionless.DateTimeExtensions」紹介

はじめに 「Exceptionless.DateTimeExtensions」をプロジェクトに追加することで DateTime で使用できる拡張メソッドが増えます インストール Visual Studio メニューの「ツール>NuGet パッケージ マネージャー> ソリューションの NuGet パッケージの管理」…

【C#】string で使用できる拡張メソッドが増える「String.Extensions」紹介

はじめに 「String.Extensions」をプロジェクトに追加することで string で使用できる拡張メソッドが増えます インストール Visual Studio メニューの「ツール>NuGet パッケージ マネージャー> ソリューションの NuGet パッケージの管理」を選択します 「参…

【C#】LINQ で使用できる拡張メソッドが増える「ExtraLINQ」紹介

はじめに 「ExtraLINQ」をプロジェクトに追加することで LINQ で使用できる拡張メソッドが増えます インストール Visual Studio メニューの「ツール>NuGet パッケージ マネージャー> ソリューションの NuGet パッケージの管理」を選択します 「参照」タブを…

【C#】シーケンスを指定された要素数で分割する拡張メソッド

ソースコード using System.Collections.Generic; using System.Linq; public static class IEnumerableExt { public static IEnumerable<IEnumerable<T>> Chunks<T> ( this IEnumerable<T> self, int size ) { while ( self.Any() ) { yield return self.Take( size ); self = se</t></t></ienumerable<t>…

【C#】List のサイズを設定できる拡張メソッド

ソースコード using System; using System.Collections.Generic; /// <summary> /// List 型の拡張メソッドを管理するクラス /// </summary> public static class ListExtensions { /// <summary> /// サイズを設定します /// </summary> public static void SetSize<T>( this List<T> self, int size ) {</t></t>…

【C#】C# で使用できる拡張メソッドが豊富にまとめられている「EXTENSIONMETHOD.NET」紹介

概要 http://www.extensionmethod.net/ 上記の「EXTENSIONMETHOD.NET」では C# で使用できる拡張メソッドが豊富にまとめられています

【C#】XmlNodeList で LINQ の「Select」「Where」「First」「FirstOrDefault」を使用できるようにする拡張メソッド

ソースコード using System; using System.Collections.Generic; using System.Xml; public static class XmlExt { public static IEnumerable<T> Select<T> ( this XmlNodeList self, Func<XmlNode, T> selector ) { foreach ( XmlNode n in self ) { yield return selector( </xmlnode,></t></t>…

【C#】DateTime が特定の曜日の場合に true を返す拡張メソッド

ソースコード public static class DateTimeExt { public static bool IsMonday( this DateTime self ) { return date.DayOfWeek == DayOfWeek.Monday; } public static bool IsTuesday( this DateTime self ) { return date.DayOfWeek == DayOfWeek.Tuesday…

【C#】明日の DateTime を返す拡張メソッド

ソースコード public static class DateTimeExt { public static DateTime Tomorrow( this DateTime self ) { return value.AddDays( 1 ); } }