C#

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

タイトルの通りです。 動かすとこんな感じになります。 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#でSQL(Sqlite3)の交差テーブルの内容をList<T>として取得する

前回SQLを使って交差テーブル(中間テーブル・関連テーブル)の内容を列挙しましたが、今回はその問い合わせ結果をC#から呼び出してみたいと思います。 前回の記事で使用した以下のテーブル定義とデータは既にファイルに保存してあるものとします。 実施環境 W…

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

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

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

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

C#で一時フォルダを扱う

C#

C# で Windows の一時フォルダと一時ファイルパスの取得は以下関数を使用すると取得できます。 一時フォルダの取得は「Path.GetTempPath()」 一時ファイルの取得は「Path.GetTempFileName()」 但し、GetTempFileNameはファイルパスを取得できますがファイル…

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#でグレイコードを作成する

タイトルの通りC#でグレイコードを作成して画像に保存したいと思います。 グレイコードはノイズに強いので例えば、プロジェクターからパターンを投影してイメージセンサーで画像を撮影したときに座標の対応関係をとるのに使用できます。 グレイコードの考え…

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はやめましょう 削除しようとする…

C#のクラスと構造体の違い・使い分け方

C#

C#でクラス(class)と構造体(struct)の違いは何か?それぞれどのような性質があるのか?また使い分け方針の紹介です。使用方法は基本的に同じですが性質が割と違います。 双方の性質の違いを考慮し、どちらを使用するかを検討することになります。 …と言って…

C#のList<T>.ForEachでTが構造体の値を更新する

C#

前回、C#の配列にForEachメソッドを追加すると同じく、ListのTが構造体の場合、ForEachメソッド内で引数に対する変更がListへ反映されないため、拡張メソッドの機能を利用して、変更が反映される操作を追加します。 具体的にどういう状況か以下のコード(も…

C#の throw と throw ex の動作の違いを確認する

C#

この話、何度も説明をしているのでいい加減何か書き残した方が良いと思ったので、概要をまとめたいと思います。 C#の throw と throw ex で何が違うのかの紹介になります。 具体的には例外が発生したときに、catch節で、以下の2種類の書き方をした時の挙動の…

非ObservableCollection<T>の変更を検出・通知する

Viewへリストの変更を通知するための機能を持つObservableCollectionですが、以下のようにデータソースがListや配列だと変更が検出できません。今回は、Modelのリストが非ObservavleCollectionの場合、やや制約がありますが変更をViewが検出するための仕組み…

C#の配列にForEachメソッドを追加する

C#

C#の配列にForEachメソッドを直接追加する方法を紹介したいと思います。 ForEachメソッドは、Pythonにmap関数とほぼ同じ機能を持ちます。map関数は「map関数は、イテラブルオブジェクトに対しその全ての要素に指定した関数を実行し、結果をシーケンスとして…

C#で配列のサイズ変更や要素を末尾に追加する

C#

C#で宣言済みの配列のサイズを変更するためにはArray.Resizeを使用します。末尾に要素を追加する場合、Resizeで+1した後最後にデータを追加します。 実装コードは以下の通りです。 // 100 → 200へ配列のサイズを変更 int[] array = new int[100]; Array.Resi…

C#でBase64形式で文字列やファイルをエンコード・デコードする

C#

C#でもASP. NET Coreなどの環境がだんだん発達してきて、WebAPIを作成したり繋いだりするケースが増えてきていると思います。 そこで、受け取ったJSON中のBase64文字列をデコードしたりする場合があると思いますがが、そういった場合、C#でどのように取り扱…

C#のtry~catch~finallyの使い方

C#

C#のtry ~ catch(+ ~ finally)構文の使い方について紹介したいと思います。 この構文は、(1)通常処理するtry節、(2)例外が起きた時にそれを処理するためのcatch節と、(3)tryを抜ける時に必ず実行されるfinally節で構成されます。 と言っても構文自体は…

階層型状態マシン(HFSM)を実装する

GoFのデザインパターンでStateパターンを階層化した、階層型有限状態マシン(HFSM:Hierarchical Finite State Machines)を作成してゲーキャラクターの制御を行ったので実装例を紹介したいと思います。「階層型のステートマシン」なんて言ったりもします。 …

C#のOpenCVSharp3を使って画像から線画を抽出する

Qiitaの以下投稿でPythonを使用して画像から線画を抽出するという処理を見たのですが、この処理をC#で書き直したらどうなるかどういうコードになるか確認してきたいと思います。 qiita.com 元のコードの確認 まず対象のコードの確認です。 以下Qiitaからの引…

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

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

C#の変数の内部表現を確認する

C#

普段使用しているCPUは、最近はMacもインテルのCPUなので、バイトオーダーは「リトルエンディアン」が主流です。 エンディアンの詳細はさておき、つまり、2バイトデータの中身が、「0x 12 34」となっていた場合メモリのレイアウトは 「0x 34 12 」と逆順にな…

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#ライクなプロパティを実現する

C#ではプロパティ構文というものがあります。これは、オブジェクトのメンバーへのアクセスを行うための、アクセッサー(setter/getter)をあたかも変数へのアクセスと同様に行える仕組みです。 // C#のプロパティ public class CSharpProp { // 一番簡単なプ…