You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
vare=IEnumerable<string>.M(outobjecto);// What type is e? Does this line compile?publicstaticclassExt{
extension<T>(IEnumerable<T>){publicstaticIEnumerable<T>M(outTt)=>...;}}
Activity
ufcpp commentedon Jun 12, 2024
昔ちょこっと書いたの:
要求1: 静的メンバー
C# 3.0 の拡張メソッドはインスタンス メソッドでだけ「既存の型に追加したように見える書き方」ができます。
123.Extension()とはできても、int.Extension()とはできません。既存の型に静的メソッドを足せなくて困る例としては、ポリフィル(古い環境向けに最新機能を移植して使えるようにするような用途)とかでしょうか。
例えば割かし最近(.NET 8、2023年11月正式リリース)、
TimeProviderという型が入って以下のような書き方ができるようになりました。TimeProviderクラス自体は、.NET 8 より前のランタイムでも使えるようにできます。(実際、
Microsoft.Bcl.TimeProviderという NuGet パッケージが公式提供されています。)以下のような書き方で、「なければ追加、あれば type forward」みたいなことができます。
インスタンス メソッドの追加風のことも、拡張メソッドでできました。
ですが、先ほどの例に出てきた
Task.Delay(TimeSpan, TimeProvider)は既存の型への静的メソッドの追加なので、これまでの C# ではどうやってもできませんでした。
ufcpp commentedon Jul 14, 2024
13から外れた。
Unsafe.As 路線は JIT を混乱させて文字通り安全じゃないらしく、急遽路線変更。
ufcpp commentedon Oct 27, 2025
ufcpp commentedon Oct 27, 2025
ufcpp commentedon Oct 27, 2025
ufcpp commentedon Oct 27, 2025
ufcpp commentedon Oct 27, 2025
ufcpp commentedon Nov 7, 2025
Ex.get_Property とか Ex.op_Plus とかでも呼べる。
ufcpp commentedon Nov 7, 2025
object の方になってそう。
ufcpp commentedon Nov 7, 2025
extension(T)の中にT?の operator 書くのダメらしい。extension の部分がそもそも
T?なら大丈夫。ufcpp commentedon Nov 7, 2025
特に演算子書くのにこれが必要っぽい。
ちなみに、呼ぶ側:
ufcpp commentedon Nov 7, 2025
式ツリーの中でだけ使えない extension もあるらしい。
&&と||。対応するファクトリメソッドが Expression 型にないとのこと。
ufcpp commentedon Nov 7, 2025
extern と UnsafeAccessor も使えるらしい。
ufcpp commentedon Nov 7, 2025
in の有無でオーバーロードあり事案:
ufcpp commentedon Nov 7, 2025
readonly 修飾子ダメ。
ufcpp commentedon Nov 16, 2025
ufcpp commentedon Jan 1, 2026