PG日誌

各記事はブラウザの横幅を1410px以上にすると2カラムの見出しが表示されます。なるべく横に広げてみてください。

.NET Framework

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は以下の通りです。

C#で最大容量つきリングバッファーを実装する

2020-06-12 リングバッファーは、FIFO(ファーストIN, ファーストOUT)つまり先に入れたものが、取り出すときは先に出ていく、Queueと同じような構造を持っています。 リングバッファーって自分のイメージでは、有限のサイズのリングの大きさ(つまり入れら…

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

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

WFPのListBoxでカードUIを作成する

WPFでListBoxを使ってカードUIを作成する方法です。 作成したものは以下のような外観になります。 リサイズすると横幅に合わせて列数が変わります。 よこに広げると以下のように並び変えられます。 カードの構造 XAMLを貼る前に構造はこんな感じになっていま…

Visual Studio 2017で単体テストもしくはTDDする

Visual Studio 2017でC#で開発してる開発者で、開発時にMSTestを使って単体テストを作成したり、コードを書くときにTDDしたりは、すっかり開発風景に定着していると思います。ただ、たまに作成方法を忘れるので、確認を兼ねてVisua Studio 2017 Community版…

C#とWPFで自力でチャート(グラフ)を描画する

WPFで数万点のデータを高速にグラフに表示しようとすると、たいていのチャートライブラリで何十秒も描画に時間がかかって使い物にならないことが多いので、簡単にデータを見たいときに使用する簡易チャートライブライを作成してみました。 線グラフっぽいも…

.NET と.NET Coreで定義ファイルを読む

.NETのアプリケーションにはアプリケーション設定ファイルから定義を読み取る機能が付いています。自作の定義フォーマットを作成せずとも定義が読み込めたりします。 そこで、.NET Framework と.NET Coreの両方から読み取ってみようと思います。 .NET Framew…

C#で行番号を取得する

C#で行番号を取得する方法です。2種類あってそれぞれ以下の通りです。 using System; using System.Diagnostics; using System.Runtime.CompilerServices; static void Main(string[] args) { GetLine_1(); GetLine_2(); } // C#4.0(VS2010)までの書き方 pub…

C#のList<T>の使い方

C#で動的に要素を追加したり、削除したりしたいときに使う動的な配列「リスト」の使い方の簡単なメモです。

【C#】標準機能でJSON をシリアライズ、デシリアライズする

2020-10-03 追記: 最新の .NET 環境では 【C#】System.Text.Jsonでオブジェクトのシリアライズ・デシリアライズ - PG日誌 が推奨されています。こちらはやや古いバージョンの.NET向けの情報になります。 C#でJSON形式を外部ライブラリを使用しないでシリアラ…

C# の region の使いどころ

2020-09-03VisualStudio上で任意の位置のコードを折りたたむ機能で #region ~ #endgreion ディレクティブというものがあります。「リージョン」と読みます。そんなリージョンですが、以下のように public void Hoge() { #region ナントカの処理 if(this....…

C#はコンストラクタで例外を投げても良いのか?

コンストラクタで例外を投げるとメモリリークする、なんて聞いたことがある人も多いかと思いますがC#でコンストラクタで例外を投げるのはOK/NGのどちらでしょうか?結論は、コンストラクタ内で例外を投げる場合コンストラクタ内で確保したリソースはコンスト…