技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

C#

n対nマッチングのロジック(C#のサンプルコード付き)

C#

以前に、以下の記事にて、マッチング処理のロジックについて書かせていただきました。 マッチング処理のロジック – サイゼントの技術ブログ 以前の記事では1対1マッチングと1対nマッチングについて説明しました。今回の記事では、より複雑なn対nマッチングに…

COBOLのマッチング処理をC#で実装する

C#

COBOLで使われているテクニックは過去のもののように思われがちですが、現在でもちょっとしたツールを作る時に役立ちます。WindowsOS環境の場合は、ちょっとしたツールはC#で作るのが便利なので、今回はC#でCOBOLのマッチング処理を実装してみました。 今回…

C#:バイナリファイルのデータを置換するツール

C#

文字列置換はサクラエディタを使用すると楽ですが、サクラエディタを使用した場合は大量データの処理ができないという問題があります。 そこで、C#をプログラムにより置換を行うというのが有効になります。プログラムでのファイルのストリーム読み込みであれ…

C#:自ユーザーのダウンロードフォルダーのパスの取得方法

C#

C#には、WindowsOSで定められる特殊なフォルダのパスがEnumで定義されています。 Environment.SpecialFolder 列挙型 (System) | Microsoft Docs 自ユーザーのダウンロードフォルダの直接のパスはEnumに登録されていないのですが、ユーザーのプロファイルフォ…

C#:外部コマンド呼び出しの方法

C#

javaプログラムからの外部コマンド呼び出しは別の記事に掲載したのですが、C#でも同様に外部コマンド呼び出しが可能です。プライベートで「画面から外部コマンドを呼び出し、外部コマンドで出力されたファイルを取り込む」というプログラムを作る予定がある…

無名クラスとは

javaやC#では、インスタンス変数をnewする際に、後ろに中かっこを記述し定義を行うことができます。ここで定義されるものは「無名クラス(匿名クラス)」と呼ばれ、クラス名を新たに定義することなく、インスタンス変数のクラス・インターフェースを継承・実…

型推論とは

型推論とは、メソッド内のローカル変数を初期値付きで(右辺がある状態で)宣言する際に、通常の型宣言の代わりに"var"という仮の型を使用できるという文法です。"var"を用いた際は、コンパイル時に自動で型を判断し、その型への置き換えが行われます。 C#で…

C#・WPF:DatePickerの日付フォーマットを変更する

C#

DatePickerのSelectedDateFormatプロパティで表示される日付のフォーマットを変更できます。Longを指定するとToLongDateString()メソッドの戻り値、Shortを指定するとToShortDateString()メソッドの戻り値が表示されます。 更に、ToLongDateString()メソッド…

C#:MissingMethodException(メソッドが見つかりません)←ビルド時に読み込むLIBと実行時に読み込むDLLのバージョンの違いかも

C#

表題の通りです。実行環境にあるDLLファイルのバージョンが誤っていたので、正しいバージョンのDLLファイルに入れ替えたらエラー解消しました。(PDBファイルも入れ替えました) デバッグ実行している時に、ソースファイルが変更されている旨のポップアップ…

NuGetとは

「NuGetって何ができるの?」と聞かれることが少なくないので、何ができるのか簡単にまとめました。一言で言うと、Mavenの.Net版のようなものです。C++やC#のプログラムを開発する時によく使います。 NuGetでは以下のようなことができます。 ・パッケージ(…

C#:Visual Studioで作成したプログラムの著作権表示について

C#

C#で作成した実行ファイルについて、プロパティ > 詳細タブ を確認すると、著作権表示が下記のようになっています。 ・コマンドラインからビルドした場合(コマンド:csc.exe hoge.cs)・Visual Studioでビルドした場合 コマンドラインからビルドした場合は…

オブジェクト指向言語で良く言われる「委譲」とは

javaやC#といったオブジェクト指向言語のプログラミングの話をしている時に、「委譲」という言葉が出てくる時があります。「委譲」には色々な意味があるのですが、このようなケースでは「具体的な処理が実装されている他のクラスのメソッドを呼び出す」とい…

C#:try-catch-finally句内のreturnの仕様

C#

表題についてjavaでは調査している記事が別にあったのですが、C#だと調査している記事が見つからなかったので、調査してみました。 C#でも、try句やcatch句の中でreturnを行った場合、returnする直前にfinally句が実行されるという挙動となります。これはjav…

C#:await・asyncの簡単なサンプルコード

C#

C#のawait・asyncは非同期処理のために用意された文法なのですが、Webで調べてみても難しく書かれていることが多く、そもそも何のための処理なのか理解するのが難しい感があります。await・asyncを用いて関数を呼び出しても、その関数の処理が終わるまで待つ…

C#:セマフォを用いた排他制御

C#

排他制御の仕組みとして先日Mutexを取り上げました(https://akira2kun.hatenablog.com/entry/2020/04/12/170559)。今回は、同じく排他制御で使われるセマフォについて取り上げます。 セマフォがMutexと異なる点は、複数のプロセス・スレッドが資源を取得す…

C#:共有メモリで可変長データを繰り返し送受信する

C#

共有メモリは、同一メモリ上で実行されるプロセス間でデータをやりとりする場合に使用する仕組みです。通常、プロセスで確保しているメモリは他のプロセスから参照することができないのですが、プロセス間で予め共有メモリとして使用するメモリのアドレスを…

WPFでSelectedItemが同期されない→ItemsSourceを先に設定してしまっているからかも

C#

表題の通りです。 XAMLで定義した画面上のリストで特定の行を選択した際、選択した行と結びついているオブジェクトを取得できないことがありハマっていたのですが、SelectedItemを先に定義してからItemsSourceを定義するようにしたら上手く取得できるように…

半角カナの文字コードに関する注意

0x00~0x7FのASCIIコード(半角英数記号やNUL・改行等の特殊な文字)に関しては文字コードセットの違いを気にする必要がないのですが、日本語の文字に関しては複数の文字コードセットが存在し、違いを気にする必要があります。半角カナについても例外ではな…

C#:イベントハンドラとは

C#

イベントハンドラとはC#で標準で用意されている文法であり、イベント送受信の処理を記述するために用意されています。 クラスAでボタンのクリック等のイベントを発行する↓クラスBはクラスAからイベントを受け取り業務処理を行う↓クラスBは業務処理終了時にク…

DLLから別のDLLを呼び出しているかも→「エラー:ファイルまたはアセンブリ 'hoge.dll'、またはその依存関係の1つが読み込めませんでした。指定されたモジュールが見つかりません。」

表題の通りです。DLLから更に別のDLLを呼び出している場合があり、その「別のDLL」はエラーメッセージには出力されません。そのため、必要だと思っているDLLを全て揃えているとしても、エラーメッセージに出力されている'hoge.dll'をexeと同じフォルダに置い…

C#:Mutexでの排他制御

C#

2020/04/18 追記実務でコピペするとAbandonedMutexExceptionが発生し得る若干行儀の悪いサンプルコードだったので、書き直しました。 ----------------------- 排他制御の方法の一つとして、C#にはMutexと呼ばれる機能が用意されています。何れか一つのスレ…

C#:WPFでのHelloWorld

C#

以前の記事では、WindowsFormでのHelloWorld(https://akira2kun.hatenablog.com/entry/2020/03/01/184434)を試しました。今回の記事では、WPFでのHelloWorldを試してみます。 WPFはWindowsFormの後発にあたるWindows向け画面アプリの形式であり、画面がXAM…

C#:デリゲートの説明(Action・Func、マルチキャストデリゲート含む)

C#

C#のデリゲートの解説は既に色々と出回っていますが、わかりにくい概念であり、色々な人が異なる切り口で説明した方が良いと思うので、私の方でも記事にします。 ---------------------------------------- デリゲートとは、一言で言えば「関数を変数として…

C#:数値リテラル一覧

C#

javaでは数値リテラルの扱いに注意が必要になることがあります。C#の仕様も気になったので、一覧にまとめてみました。 javaとの違いは以下の通りです。・整数型に符号無し(u)、実数型にdecimal型(m)も指定できる ※decimal型は丸め誤差が発生しない実数型、ja…

C#:オブジェクトの中身をコピーする方法(MemberwiseCloneメソッド実装)

C#

参照型変数(主に、自分で作成したクラスのオブジェクト)をコピーする場合、単純に「=」で代入するだけでは不十分な場合があります。参照型変数の中身は参照先(オブジェクトのメモリ領域を示すポインタ)です。「=」で代入するだけでは、参照先だけがコピ…

C#でのHelloWorld(フォームアプリ)

C#

今回は、C#のフォームアプリについて、HelloWorldを表示するアプリケーションを作成したいと思います。単純に手順通りにHelloWorldを表示させるだけだと今後の開発でつまずきかねないので、「Visual Studio Community」というIDEが何をしていてなぜ動くのか…

C#でのHelloWorld(コンソールアプリ)

C#

C#のコンソールアプリ(コンソール上で動くアプリケーション)をビルド(実行ファイルを作成)して実行手順をまとめてみました。IDEである Visual Studio Community を使う方法と、Windows OS に標準でついてくるコンパイラ csc.exe を使う方法を紹介します…