カテゴリ : C#

[C#] sln を使用せず csproj でビルドの依存関係を設定する

csproj で別プロジェクトを参照して、ビルドのみ実行するように依存関係を設定する方法です。
ビルドのみ実行するため、別プロジェクトのクラスを使用できませんし、ファイルもビルド出力しません。
通常はソリューションで設定することが多いと思いますが、sln を使用せずに設定します。

C# C# csproj MSBuild 2024-09-04 (水)
[C#] ArrayPool を使用して ToArray のアロケーションを1回にする方法

一般的には List<T> を使用して要素を追加して行き、最後に ToArray() することで配列を作成します。
この方法では、最後の配列以外に作業用のヒープメモリ確保が発生してしまいます。
プールと構造体を使用することで、最後の完成した配列に対して1回のみメモリ確保する実装例です。

C# C# パフォーマンス 2024-08-08 (木)
[C#] ある型が指定したクラスまたはインターフェイスにキャスト可能か判定する方法

通常は is や as でキャストできるか判定しますが、Type 指定でクラスやインターフェイスにキャスト可能か判定する方法です。
is と同じ結果になる方法だと思います。指定したクラスの派生または、指定したインターフェイスを実装しているか判定できます。

C# C# リフレクション 2024-04-22 (月)
[C#] DateTimeKind の変換方法と意識すること

DateTimeには Kind プロパティがあり、UtcLocal という状態を持つ場合があります。
基本的には Unspecified であり、Ticks の日時のみが処理されます。
しかし一部の処理では Kind を意識する必要があるため、変換方法や注意点をまとめます。

C# C# 2024-01-22 (月)
[C#] Task.Run() のラムダ式でクロージャを回避して、ヒープメモリを軽減する

Task.Run() とラムダ式を使用すると、簡単にタスクを実行できます。しかし、ラムダ式で外部変数をキャプチャすると、クロージャによりメモリアロケーションが発生します。
外部変数を引数に取る静的メソッドを用意することで、ラムダ式のメモリアロケーションを削減できます。
Task.Run() では実現できないため、Task.Factory.StartNew() を使用して実現する方法です。

C# C# パフォーマンス BenchmarkDotNet 2023-11-24 (金)
[C#] 型が同一アセンブリ内 internal アクセスできるか判定する

外部アセンブリからアクセスできる型かどうかの public 判定は Type.IsVisibleで可能で、Assembly.GetExportedTypes() で全てのパブリック型を取得できる。
この internal 版の判定を行いたい。public, internal, protected internal で入れ子になったネスト型も含めて、同一アセンブリ内でアクセスできるかどうかを判定する。
ここでは protected による継承でアクセスできるかどうかは判定対象外とする。

C# C# 2022-01-31 (月)