C#

.NET Core

MagicOnionが通信しているデータサイズを測定

MagicOnionが通信しているデータサイズを測定する場合、送信するデータクラスのインスタンスを MessagePackSerializer.Serialize()し、シリアライズされたバイトデータのサイズから測定できます。 MagicO...
.NET Core

.NET 6.0とMagicOnionで実現するgRPC通信(Windowsフォーム)v6

.NET 6.0 の Windowsフォームアプリから、MagicOnion NuGetパッケージを使い、gRPC通信処理を行う 前回作成したサンプル に、MagicOnionで通信するモデルクラスのKeyを、文字列から数値インデックスへ変...
.NET Core

.NET 6.0とMagicOnionで実現するgRPC通信(Windowsフォーム)v5

.NET 6.0 の Windowsフォームアプリから、MagicOnion NuGetパッケージを使い、gRPC通信処理を行う 前回作成したサンプル に、WEBサーバの最大30MB通信制限を解除する設定を加えました。ソースコードは Git...
.NET Core

.NET 6.0とMagicOnionで実現するgRPC通信(Windowsフォーム)v4

.NET 6.0 の Windowsフォームアプリから、MagicOnion NuGetパッケージを使い、gRPC通信処理を行う 前回作成したサンプル に、シリアライズされたMessagePackの通信データを Lz4圧縮する処理を加えまし...
C#

ファイルの内容を16進数で表示するツール

ファイル読み込んで内容を16進数で表示するツールを、けっこう前に作成しました。ソースコードは GitHub で公開しています。   主な処理
C#

Windowsイベントログを発行するツール

Windowsイベントログを発行するツールを、けっこう前に作成しました。ソースコードは GitHub で公開しています。   主な処理
.NET Core

GrapeCity.Win.MultiRow GcMultiRow for Windows Forms 11 よく使う機能

レイアウト ・縦スクロールバーを常に表示する場合。   ヘッダー操作 ・特定列のヘッダータイトルを変更する場合。   セル操作 ・選択行の特定セルの値を取得、変更する場合。   ・選択行の特定セルを選択状態にする場合。   ・選択行の特定セ...
MagicOnion

.NET 6.0とMagicOnionで実現するgRPC通信(Windowsフォーム)v3

.NET 6.0 の Windowsフォームアプリから、MagicOnion NuGetパッケージを使い、gRPC通信処理を行う 前回作成したサンプル は、通信用Modelクラスのメンバに使っている型によっては、Exceptionが発生した...
C#

C#のLinqの書き方に悩んだらChatGPTに聞こう!

satouyouhei.g@gmail.com C#について C#(シーシャープ)は、マイクロソフトが開発したオブジェクト指向プログラミング言語の1つです。C#は、Javaと同様に、プログラムの移植性と安全性を向上させるために、.NET Framework上で動作するように設計されています。 C#は、多くのプログラム分野で使用されています。たとえば、デスクトップアプリケーション、Webアプリケーション、ゲーム開発、モバイルアプリケーションなどです。また、C#は、Windowsアプリケーションの開発に特に適しています。 C#は、簡単な構文と強力な型検査機能を備えています。また、LINQと呼ばれる言語統合クエリ機能があり、データベースからのデータの取得や集計などを簡単に行うことができます。さらに、C#には、ガベージコレクション(自動的にメモリを解放する機能)など、プログラムの安全性を高めるための多くの機能があります。 C#は、Visual Studioという統合開発環境を使用して開発することができます。Visual Studioは、デバッグやコードの自動補完など、多くの便利な機能を提供しています。C#の学習には、プログラミングの基礎知識が必要ですが、初心者でも簡単に学ぶことができます。 satouyouhei.g@gmail.com 2つのListから、重複するIDを持つListを抽出するC#のサンプルを作って。 以下は、2つのListから重複するIDを持つListを抽出するC#のサンプルコードです。 arduino Copy code List<int> list1 = new List<int>() { 1, 2, 3, 4, 5 }; List<int> list2 = new List<int>() { 3, 4, 5, 6, 7 }; List<int> duplicateIds = list1.Intersect(list2).ToList(); このコードでは、list1とlist2という2つの整数型のListがあります。Intersectメソッドを使用して、重複するIDを持つListを抽出しています。Intersectメソッドは、2つのシーケンスの共通要素を返します。ToListメソッドを使用して、重複するIDを持つListを新しいListに変換しています。 上記のサンプルコードでは、duplicateIdsという名前の新しいListに、list1とlist2の重複するIDが含まれています。 satouyouhei.g@gmail.com List<int>のintは、任意のデータクラスにしてほしい。 以下は、2つの任意のデータクラスのListから重複するIDを持つListを抽出するC#のサンプルコードです。 まず、2つの任意のデータクラスを定義します。例えば、以下のようにPersonクラスとEmployeeクラスを定義します。 csharp Copy code public class Person { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } public class Employee { public int Id { get; set; } public string Name { get; set; } public string Department { get; set; } } 次に、PersonクラスとEmployeeクラスのListを作成し、Intersectメソッドを使用して、重複するIDを持つListを抽出します。以下はサンプルコードです。 csharp Copy code List<Person> persons = new List<Person>() { new Person { Id = 1, Name = "Alice", Age = 30 }, new Person { Id = 2, Name = "Bob", Age = 25 }, new Person { Id = 3, Name = "Charlie", Age = 40 }, new Person { Id = 4, Name = "Dave", Age = 35 } }; List<Employee> employees = new List<Employee>() { new Employee { Id = 2, Name = "Bob", Department = "Sales" }, new Employee { Id = 3, Name = "Charlie", Department = "Marketing" }, new Employee { Id = 5, Name = "Eve", Department = "IT" } }; var duplicateIds = persons.Select(p => p.Id) .Intersect(employees.Select(e => e.Id)) .ToList(); // 重複するIDを持つPersonとEmployeeのデータを出力する foreach (var id in duplicateIds) { var person = persons.FirstOrDefault(p => p.Id == id); var employee = employees.FirstOrDefault(e => e.Id == id); Console.WriteLine($"ID: {id}, Person Name: {person.Name}, Employee Department: {employee.Department}"); } このコードでは、personsとemployeesという2つの任意のデータクラスのListがあります。Selectメソッドを使用して、それぞれのListからIDを抽出し、Intersectメソッドを使用して、重複するIDを持つListを抽出しています。最後に、重複するIDを持つPersonとEmployeeのデータを出力しています。 上記のサンプルコードでは、duplicateIdsという名前の新しいListに、personsとemployeesの重複するIDが含まれています。 satouyouhei.g@gmail.com Containsメソッドより、Intersectメソッドを使った方が良い? ContainsメソッドとIntersectメソッドは、両方とも2つのコレクションを比較するために使用できますが、使用目的が異なる場合があります。 Containsメソッドは、指定された要素がリストに含まれているかどうかを確認するために使用されます。例えば、以下のコードでは、personsリストにpersonオブジェクトが含まれているかどうかを確認しています。 less Copy code if (persons.Contains(person)) { // リストに含まれている場合の処理 } 一方、Intersectメソッドは、2つのリストに共通する要素を返すために使用されます。以下のコードでは、personsリストとemployeesリストに共通するIDを持つ要素を抽出しています。 css Copy code var duplicateIds = persons.Select(p => p.Id) .Intersect(employees.Select(e => e.Id)) .ToList(); Containsメソッドは、指定された要素がリストに含まれているかどうかを確認するだけで、共通する要素を抽出するためには使用できません。一方、Intersectメソッドは、共通する要素を抽出するために使用され、Containsメソッドよりもより効率的に処理できます。 したがって、2つのリストから重複する要素を抽出する場合は、Intersectメソッドを使用することをお勧めします。 satouyouhei.g@gmail.com 自分はContainsメソッドを使い、下記のようなソースコードを書くけど、Intersectを使った方が良い? var duplicateIds = persons.Where(p => employees.Select(Id => Id).Contains(p.Id)).ToList(); Containsメソッドを使用して、2つのリストから重複する要素を抽出することは可能ですが、リストの要素数が増えると処理時間が長くなる可能性があります。 一方、Intersectメソッドを使用すると、2つのリストに共通する要素を高速に抽出できます。また、Intersectメソッドは、両方のリストが昇順にソートされている場合により高速に処理されるため、より効率的なソリューションになります。 したがって、リストの要素数が多い場合や、処理速度が重要な場合は、Intersectメソッドを使用することをお勧めします。ただし、リストの要素数が少ない場合や、処理速度が問題にならない場合は、Containsメソッドを使用しても問題ありません。
C#

データクラスのList内に重複している値があるか、Linqを使ってチェックする

.NET 6.0 C#上で、データクラスのList内に重複している値があるか、Linqを使ってチェックするサンプルを作成しました。ソースコードはGitHubで公開しています。 重複チェックするデータクラスの構造はこちら。 テストデータ   ...