コガネブログ

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

【C#】File.Copy で DirectoryNotFoundException が出る場合

C#

概要 DirectoryNotFoundException: Could not find a part of the path "XXX" or "YYY" File.Copy した時に DirectoryNotFoundException が出る状況に遭遇した 第2引数の destFileName に指定しているファイルパスが長すぎることが原因だった ファイルパスを…

【C#】文字列に含まれている改行やタブ文字などのエスケープ文字を変換する方法

C#

概要 var str = "{\n\t\\\"id\\\":25,\n\t\\\"name\\\":\\\"\\u30d4\\u30ab\\u30c1\\u30e5\\u30a6\\\"\n}"; Debug.Log( Regex.Unescape( str ) ); { "id":25, "name":"ピカチュウ" } Regex.Unescape を使用する

【C#】ファイルが gzip で圧縮されているかどうかを確認する関数

C#

概要 public static bool IsGzip( byte[] bytes ) { return 2 <= bytes.Length && bytes[ 0 ] == 31 && bytes[ 1 ] == 139; }

【C#】Windows Forms の InitializeComponent で User Control の new が消えてしまう場合

C#

概要 User Control を継承したクラスのコンストラクタが public 以外になっていると Windows Forms の InitializeComponent で User Control の new が消えてしまう

【C#】シーケンスの要素が重複している場合 true を返す拡張メソッド

ソースコード using System; using System.Collections.Generic; using System.Linq; public static class IEnumerableExt { public static bool HasDuplication<TKey, TSource> ( this IEnumerable<TSource> self, Func<TSource, TKey> keySelector ) { return self .GroupBy( keySelector ) .Any( </tsource,></tsource></tkey,>…

【C#】明示的なインターフェイスの実装

C#

概要 public interface IHoge { void Hoge(); } public class Hoge1 : IHoge { // 通常の実装 public void Hoge() { } } public class Hoge2 : IHoge { // 明示的なインターフェイスの実装 void IHoge.Hoge() { } } public class Program { private static v…

【C#】デバッグビルドだとやけに動作が遅い場合のメモ

C#

概要 リリースビルドだと3秒で終わる処理が デバッグビルドだと5分以上かかる減少に遭遇した Visual Studio メニューの「デバッグ > すべてのブレークポイントの削除」を選択したら デバッグビルドでも処理が5秒くらいで終わるようになった 条件付きブレーク…

【C#】using ステートメントに指定した変数が null でも抜ける時に例外は発生しない

C#

概要 using System; using UnityEngine; internal sealed class Hoge : IDisposable { public void Dispose() { Debug.Log( "ピカチュウ" ); } } internal class Example : MonoBehaviour { private void Start() { using ( Hoge hoge = null ) { } } } 上記…

【C#】ショートカット(.lnk)のリンク先のパスを取得する方法

C#

概要 Visual Studio のプロジェクトの「参照」を右クリックして「参照の追加」を選択して 「COM」を選択して「Windows Script host Object Model」をチェックして「OK」を押します using IWshRuntimeLibrary; using System; internal static class Program {…

【C#】NetOffice で横棒グラフを作成する時に軸を反転する方法

C#

ソースコード using NetOffice.ExcelApi; using NetOffice.ExcelApi.Enums; public static class Program { private static void Main() { using ( var application = new Application() ) { var workBook = application.Workbooks.Add(); var workSheet = w…

【C#】NetOffice で横棒グラフを作成する方法

C#

ソースコード using NetOffice.ExcelApi; using NetOffice.ExcelApi.Enums; public static class Program { private static void Main() { using ( var application = new Application() ) { var workBook = application.Workbooks.Add(); var workSheet = w…

【C#】NetOffice でグラフを挿入する時の位置の間隔

C#

概要 NetOffice において Excel の1つのセルの横幅は「54」、縦幅は「13.5」で扱われる using NetOffice.ExcelApi; using NetOffice.ExcelApi.Enums; public static class Program { private static void Main() { using ( var application = new Applicatio…

【C#】メタデータ ファイル 'XXXX.exe' が見つかりませんでした。

C#

状況 Visual Studio の .sln で複数の .csproj を管理している状態で 「デバッグの開始」をしようとしたところ 「メタデータ ファイル 'XXXX.exe' が見つかりませんでした。」 というコンパイルエラーが発生した ソリューションのクリーンやリビルドを試して…

【C#】Console.WriteLine を無効化する方法

C#

概要 using System.IO; ... Console.SetOut( TextWriter.Null ); Console.SetError( TextWriter.Null ); 参考サイト様

【C#】大文字小文字を区別しない String.Contains

C#

ソースコード using System; public static class StringExt { public static bool Contains ( this string self, string value, StringComparison comparisonType ) { return self.IndexOf( value, comparisonType ) != -1; } } 使用例 using System; publi…

【C#】文字列内の末尾の数値をインクリメントするサンプル

C#

概要 using System; using System.Collections.Generic; using System.Text.RegularExpressions; public static class Program { private static void Main() { var inputs = new List<string>(); for ( int i = 0; i <= 100; i++ ) { inputs.Add( "Item" + i.ToStri</string>…

【C#】数値の桁数を取得する拡張メソッド

ソースコード using System; public static class IntExt { public static int GetDigits( this int num ) { return num == 0 ? 1 : ( int ) Math.Log10( num ) + 1; } } 使用例 using System; public static class Program { private static void Main() { …

【C#】文字列の末尾の数値を抽出する正規表現

C#

概要 using System.Text.RegularExpressions; using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var input = "Item001"; var pattern = "([0-9]*$)"; var regex = Regex.Matc…

【C#】シーケンスの先頭や末尾に要素を追加できる LINQ の機能「Prepend」「Append」

C#

概要 using System.Linq; public class Example { private void Start() { var list = new[] { 1, 2, 3 }; // 0, 1, 2, 3 var result1 = list.Prepend( 0 ); // 1, 2, 3, 4 var result2 = list.Append( 4 ); } } Prepend を使用すると先頭に要素を追加できる…

【C#】インターフェイスが実装されているクラスかどうか判定する方法

C#

ソースコード using System; public static class Program { public interface ICharacter{} public class Pokemon : ICharacter{} public class Item{} private static void Main() { var interfaceType = typeof( ICharacter ); var pokemonType = typeof(…

【C#】.unitypackage から GUID のリストを取得する方法

概要 「SharpCompress」を使用して using SharpCompress.Readers; using System; using System.IO; public static class Program { private static void Main() { var path = "【.unitypackage のパス】"; using ( var stream = File.OpenRead( path ) ) { v…

【C#】C# から Mac の .command ファイルを実行したい場合

C#

概要 var terminalPath = "/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal"; var scriptPath = "【.command のファイルパス】"; var info = new ProcessStartInfo( terminalPath ) { Arguments = scriptPath, }; Process.Start( info ); 上…

【C#】C# から Mac のシェルスクリプトを実行したい場合

C#

概要 var terminalPath = "/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal"; var scriptPath = "【.sh のファイルパス】"; var info = new ProcessStartInfo( terminalPath ) { Arguments = scriptPath, }; Process.Start( info ); 上記のよ…

【C#】AmbiguousMatchException: Ambiguous match found.

C#

はじめに private static string GetParam( Hoge hoge ) { ... } private static string GetParam( Fuga fuga ) { ... } 例えば上記のように、引数が違う同名の関数がオーバーロードされており、 var attr = BindingFlags.Static | BindingFlags.NonPublic; …

【C#】指定した文字列が予約語かどうか確認できる関数を自作する

C#

ソースコード public static class Utils { public static IReadOnlyList<string> List { get; } = new [] { "abstract", "as", "base", "bool", "break", "byte", "case", "catch", "char", "checked", "class", "const", "continue", "decimal", "default", "deleg</string>…

【C#】予約語の一覧を取得できる関数を自作する

C#

ソースコード public static class Utils { public static IReadOnlyList<string> List { get; } = new [] { "abstract", "as", "base", "bool", "break", "byte", "case", "catch", "char", "checked", "class", "const", "continue", "decimal", "default", "deleg</string>…

【C#】シーケンスから重複している要素を取得する拡張メソッド

ソースコード using System; using System.Collections.Generic; using System.Linq; public static class IEnumerableExt { public static IEnumerable<TKey> GetDuplication<TKey, TSource> ( this IEnumerable<TSource> self, Func<TSource, TKey> keySelector ) { return self .GroupBy( keySelector )</tsource,></tsource></tkey,></tkey>…

【Unity】IDisposable の破棄漏れを見つけるクラス

ソースコード Dispose が呼び出されずにインスタンスが破棄されると デストラクタのタイミングでエラーログを出力する 使用例 using UnityEngine; // IDisposable を直接実装するのではなく、 // CheckDisposable を継承するようにする public sealed class …

【C#】Excel のファイルを作成して折れ線グラフを挿入する方法

C#

はじめに 上記サイト様で詳細が記載されていますが、備忘録として自分のブログにも Excel のファイルを作成して折れ線グラフを挿入する方法を書き残しておきます インストール Visual Studio メニューの「ツール > NuGet パッケージ マネージャー > ソリュー…

【C#】.ini ファイルの読み込み・書き込みができる「INI File Parser」紹介

はじめに 「INI File Parser」をプロジェクトに追加することで .ini ファイルの読み込み・書き込みができる 入手方法 Install-Package ini-parser パッケージマネージャーコンソールで上記のコマンドを実行します 使い方 読み込み [Dialog] Width=512 Height…