.NET Framework

C#で文字列にSQLのIN句のようなメソッドを追加する

SQLにあるIN句をC#の文字列に適用し、リストに格納された文字列がある文字列に一致するかどうかを判定する処理をstringに追加したいと思います。 例えば"ABC123"という文字列の中に"AB", "12"という文字が含まれているかという処理は以下のように書けば判定…

C#の共有メモリで簡単にオブジェクトを共有する方法

C#を使ってプロセス間でデータ共有をする際にオブジェクトを共有する方法です。 プロセス間でオブジェクトを共有したい場合、大抵の場合構造体を定義してメモリに書き込めばすれば良いとネットに書いてあります。ですが、普段クラスで扱っているデータをその…

C#のMemoryMappedFileで作成した共有メモリをC++(ネイティブ)から利用する

C#でMemoryMappedFileを使って作成した共有メモリをVC++(あるいはC言語)から利用する方法です。 条件 .NET Framework VC++ Windows限定(WINAPIを利用) .NET Core & Linuxとかでは全然使えないのでご了承ください。 C#側のコード まずはこんな感じでC#上…

C#のMemoryMappedFile(共有メモリー)でエラーが出たときの対処法

Windows上でサービスなどのシステム権限やAdminisratorsなどの高い権限でMemoryMappedFile使って共有メモリを作成し、一般ユーザー権限のような権限レベルの異なるプロセスから共有メモリをOpenExistingしようとする場合に出るであろうエラーの対象方法です…

C#でリストから複数の要素をランダムに重複せず取得する

C#であるリスト(IList)の中から重複しない複数の要素をランダムに取得します。 「任意のデータが入ったListを対象にランダムに値を取得でき」、操作後に「対象のリストは抽出前と後で変化しない」ことを条件とします。 Unityの場合、Random.Next(N, M) を …

C#でDictionaryのキーに複数のキーを設定する

DictionaryのKeyに指定するオブジェクトを工夫することで複数のキーを指定できるようにしたいと思います。ただし、検索するとよく出てくるTupleクラスを使用した方法はコードが見づらい(というか書く値の意味が不明瞭化する)ためメリットが薄いです。従っ…

C#でTypeInitializationExceptionが発生する

ある日突然プログラムを実行したら「TypeInitializationException」が発生した場合の対処法です。 自分のコード内であれば、大体半分くらい確率で以下の状況です。残りの半分は外部の環境(リンクしてるDLLとか…)で発生しているので環境を再インストールす…

キーボードを適当に打ってスーパープログラマになれるアプリを作ってみた

タイトルの通りです。 動かすとこんな感じになります。 youtu.be サムネサイズだと小さすぎて何やってるかわからないので大きくしてみてください(見ないか…orz コードはGitHubに上げてみました。適当なのでクソコードです。 github.com 作成環境 以下で動作…

C#とC++で任意の型をスターリンソートする

ネットで少しだけ話題になったネタ系ソートアルゴリズムのスターリンソート(というかフィルター?)をC#とC++で実装してみようと思います。 スターリンソートとは? C#の実装 オリジナルの実装 少し改造してみる C++で実装 オリジナルの実装 少し改造してみ…

C#のファイル操作で発生する例外のメモ

自分向けのメモ。耄碌したのか同じことを何回も調べてたのでまとめ。 ファイル操作 存在する or 存在しないファイルに対してメソッドを実行したときの挙動 メソッド名 結果 メッセージ File.Copy sourceFileName : FileNotFoundException ファイル '${0}' が…

.NET CoreでTextFieldParserを使用したCSVの読み取り

.NET Coreに"TextFieldParser"ないじゃん!作ろう!(当然Unityにも無いです。 、、、とはいっても.NET Core3.0で移植されるみたいなのでそれまでのつなぎって感じですかね、、、? つまり、C#でCSVの読み取りを検索するとよく出てくる「TextFieldParser」(…

C#である数列の内容を重複せずランダムに取り出す

前回書いたC#の乱数の作成を利用してある数列の内容を重複せずにランダムに取り出す方法を紹介したいと思います。 「同じ数字は出したくない」という場面で使用できるかと思います。 この実装を使用した場合の使用方法は以下の通りです。 public static void…

C#で乱数を作成する & 毎回異なるシードを指定する方法

C#(Unity以外/.NET FM, .NET Core)で乱数を生成するには、System.Randum クラスを使用します。 Randomクラスの基本的な使い方 短時間でRandomクラスを複数インスタンス化すると乱数が同値になる 回避案(1) Randomクラスのインスタンスを全体で使いまわす …

C#でStopwatchを使った時間計測を1行でできるようにする

ある特定の区間の実行時間を測定したい事があると思います。(そして結果をパワポやエクセルに張り付けて報告しますね? その場合、一般的にはStopwatch(System.Diagnostics名前空間内)を使って以下コードを記述していると思います。 // 典型的な時間計測…

C#でConsoleへの出力内容をTraceに転送する(その後ファイルに出力する

タイトルの通りなのですが、以下のようなConsole出力をそのままにして出力先をTraceに転送したい、(というか、Traceに転送した後にファイルに書き出したい)事があります。 例えばこんな感じ、、、 最初はコンソールアプリで開発して今コールへログを出して…

C#でGUIDをToStringするときに使用できる書式

C#でGUID(128bit長の一意の識別子)を生成するには、標準ライブラリ内のGuidクラス(System名前空間内)を使用します。 using System; public static void Main(string[] args) { Guid id = Guid.NewGuid(); Console.WriteLine(id.ToString()); // c1b2e279…

C#でEnumに付与した属性と属性の値を取得する

タイトルの通り、C#で自分で作成したEnum型に属性を付与し、その属性を取得およびその属性の値の取得をしたいと思います。 属性をオブジェクトとして取得して内容を取り出す流れになります。 対象の型の準備 値を取得する拡張メソッドの作成 拡張メソッドの…

C#でOlliの手書き風描画のフィルタを再現する

動画と写真を手書き風に加工する「Olli」というアプリがあるのですが、結構きれいに手書き風のフィルタがかけられると話題になっていました。 ねとらぼさんのOlli紹介記事 そこで、C#を使って手書き風のフィルタを再現してみようと思います。 申し訳ないです…

C#のArrayListとHashtableは基本的に非推奨

C#のArrayListとHashtableは非推奨 2018年に新規にArrayListの使い方を説明するWebページがあったりしますが、C#のArrayListは現在利用は推奨できません。代わりにList<T>クラスを使用しましょう Javaを学習した方がC#に動的配列の機能を探して同じ機能が無いか</t>…

C#でListの内の要素をforeach中に削除する

結論から言うと、foreachの中でリストの要素を削除するのは無理です。諦めましょう。*1 代替手段 (1) for文を逆順で回す (2) RemoveAllメソッドで削除 (3) Whereで抜粋する (4) 自作する foreachの右辺でToArray() + Removeはやめましょう 削除しようとする…

OpenCvSharpで画像データを高速に設定、取得する

C#のOpenCVライブラリのOpenCVSharp3でMatに高速でデータ読み書きする方法の紹介です。 高速にデータの読み書きをするためにMat.Data : IntPtr を利用してデータの読み書きを行いたいと思います。 使用しているライブラリは、OpenCvSharp3(ver. 3.4.1.20180…

C#のBigInteger型で超巨大な数字を扱う

C#の組み込み型で最も大きい値を扱える型は、decimal型で最大の整数として、79,228,162,514,264,337,593,543,950,335(7穰9228秭1625垓1426京4337兆5935億4395万0335)となっています。 ulongの最大値の10億倍(10の9乗)もあるので十分大きいため、余程の事…

C#の最新版(C#7.3などを)を使用する方法

2018年6月2日現在、VisualStudioの.NETのC#プロジェクトでC#7.3などの最新のC#規格を利用可能にする方法を紹介したいと思います。(何故か、C#7.0までの構文しか使えず調べるのに手間取ってしまったのでやり方のメモとなります。) C#のバージョンの選択方法…

C#でFizzBuzzを実装する

FizzBuzzの問題の解法は出尽くしていると思いますが、自分でコードを書いた事が無かったためチャレンジしてみようと思います。 作成環境はVS2017(15.7.2) + .NET4.7.2 (≒C#7.2)です。 ルール確認と模範解答 まずはルールの確認です。概ね以下の通りです。 最…

C#びDictionaryで自作オブジェクトをキー:TKeyに使用する

C#のDictionaryのTKeyにオブジェクトを指定した場合、参照アドレスが同じであれば同じオブジェクトと判断されます。これはオブジェクト同士の比較で a == b が true となる場合、同じキーと認識されることを表します。 今回は、自作のクラスの内容が同じ場合…

WPFで未処理の例外を一括で処理する

WPFで例外が処理されずに最上位のベントハンドラから例外がthrowされた場合、アプリがクラッシュします。 アプリがクラッシュすると、以下のような、OSのアプリのクラッシュレポートダイアログが表示され、以上が発生したことがユーザーに通知されます。 こ…

C#で構造体のunion(共用体)を扱う

C/C++にあるunionをC#で使用する方法は、ネットにいくつか解説しているサイトがあります。しかし、構造体がunionになったものは例があまりないため紹介したいと思います。 基本的に、StructLayout = "LayoutKind.Explicit"(明示的にレイアウトを指定する)…

C#でリトルエンディアンをビッグエンディアンに変換する

タイトルの通り変換をするための操作の紹介をしたいと思います。 まず、誤解を恐れずに言うと、ネットワークにデータを流すときは「ビッグエンディアン」形式、いつも使ってるPC上(のC#の内部表現)では「リトルエンディアン」形式が使われています。 更に…

WPFでボタンにホバーエフェクトをかける

WFPのボタンコントロールにホバーエフェクトをかけたいと思います。 マウスオーバーするとボタンの色が変わります。完成すると以下のようなイメージになります。GIFにすると画質悪い… XAML メイン画面のXAMLは以下の通りです。

VisualStudio 2017で.NET Framework4.7.1を利用可能にする

Visual Studio 2017に.NET4.7.1を追加する方法です。いつも、MSのWebサイトへ飛んで開発者キットをダウンロード → インストーラを起動し導入していましたが、今回は2017から新しく追加されているVS用のインストーラを使って追加する方法で導入したいと思いま…