2018-01-01から1年間の記事一覧

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

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

C#でグレイコードを作成する

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

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

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

【C#】ArrayListとHashTableクラスは基本的に非推奨

C# では ArrayList と Hashtable は(基本的に)非推奨です。 Java は動的に要素を追加したりするのに(割と古い話ですが)ArrayList<E> を使用しますが C# で同等の機能は List<T> クラスであり ArrayList クラスではありません。同様に Java でキーと値の組み合</t></e>…

はてなブログの目次をカスタマイズする

はてなブログって見出しを表示する記法がありますが、デフォルトだとめちゃくちゃダサいです。 このブログのテーマは「Evergreen」です。ここで表示される見出しの見た目をCSSを使ってカスタマイズしたいと思います。 見た目 見出しを表示すると以下のように…

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

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

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

C#

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

【C#】List.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が検出するための仕組み…

うざい & 邪魔な侍エンジニア塾の記事をGoogleの検索結果から非表示にする

2020-07-29 はじめに Googleでプログラミングの事を調べるとやたらと検索に引っかかって上位に表示される「侍エンジニア塾」をGoogleの検索結果から除外して目に触れないようにしたいと思います。 対象ブラウザはChrome限定です。拡張機能の「ゴシップサイト…

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節で構成されます。 と言っても構文自体は…

LogicoolのゲーミングマウスG403を10か月使った感想

ロジクールのゲーミングマウス、G403のワイヤレス版のG403WLを10か月使った感想とレビューを紹介したいと思います。 【PUBG JAPAN SERIES 2018推奨ギア】LOGICOOL ロジクール G403 Prodigy ワイヤレスゲーミングマウス G403WL出版社/メーカー: ロジクール発…

IIJmioのSIMサイズ変更の方法と到着日数(マルチSIM対応最新版

IIJから提供されるSIMのサイズ変更の方法と、到着日数の紹介をしたいと思います。 IIJのSIMサイズは2018年9月現在、「マルチSIM」となっています。マルチSIMとは以下のように、一枚のSIMでnano SIM/micro SIM/標準SIMの3サイズに対応できるSIMカードの事です…

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

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

【C#】OpenCVを使って画像から線画を抽出する

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 」と逆順にな…

ACジャパンのセーブ・ザ・チルドレンが炎上した件について

ACジャパンが支援する「子ども支援の国際NGOであるセーブ・ザ・チルドレン」広告が炎上しているようです。 どうも広告内に設問があったのですがそれが難しすぎるとの事です。 まず、問題を確認する前に、広告の内容や意義や目的の説明を見ておきましょう。以…

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

C#の組み込み型で最も大きい値を扱える型は、double型です。最大値は、1.7x 10の308乗とありますが、浮動小数点の精度の関係で実際扱える有効桁数が17桁程度なので極大の数値に対し有効桁外の演算を行うと計算結果に反映されない…みたいな状態になります。 …

C++でC#ライクなプロパティを実現する

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

C#の組み込み型の値の範囲の確認

C#

C#で最初から使用できる型を組み込み型と言います。 範囲使用できる範囲をすぐ忘れてしまうので自分のためにまとめてみました。 C# は int や double など、他の型のある言語で利用できる型がC#にも用意されています。組み込み型の特徴は以下の通りです。 .N…

ひし形と点の当たり判定を行う

今回は、ひし形(というか任意の4点からなる四角形)と、ある点の衝突判定を行いたいと思います。 判定処理の概要ですが、以下図の通り任意の4点 A ~ D をそれぞれを線で結び四角形とし、そこに点 P を与え、それぞれ四角形の内(=衝突している)外(=衝…

C#で表示する小数点の桁数を指定する

C#

C#で小数点以下の桁数を指定して文字列表示を行う方法を紹介です。

C#の自動実装のイベントは解放されるのか?

C#

C#では、プロパティのイベント版ともいえる「自動実装イベント」を以下のように宣言することができます。 // event構文を使ったイベント登録処理の公開 public event Action EventAction; イベント構文を使ってイベントを登録した場合のオブジェクトの破棄周…

【C#】構造体配列のポインタを持つ構造体のマーシャリング

C#の相互運用(C#からネイティブDLLの呼び出しの場合)で構造体の中に構造体配列のポインタを持つ関数のマーシャリングのやり方です。 ネイティブDLL側の宣言 C#側の実装方法 ネイティブDLL側の宣言 ネイティブのDLL側の宣言は以下のようになっているとしま…

dllexport と__stdcallを同時に宣言すると関数名が変わる

C++

VsiaulStudioのC++のプロジェクトで、DLLを作成し、関数を外部公開するため、 extern "C" と dllexport を指定したところ予期しない名前がついていて関数呼び出しが失敗してしまいました。 以下のように、外部公開される名前の先頭にアンダースコア、末尾に…