https://github.com/dotnet/csharplang/blob/main/proposals/first-class-span-types.md
VS 17.13 p1 (C# 13 が GA になった瞬間)で merge されてる。
{}string[]a=[];ReadOnlySpan<object>a2=a;// C# 13 でも OKSpan<string>s=[];ReadOnlySpan<object>s2=s;// これは 13 だとエラー。C.M(newobject[1]);// これは 13 だと ambiguous。preview だと Span っぽい。ReadOnlySpan にするみたいな話はみた。newint[1].Ex();// 13 だと拡張メソッドでの T[] → ROS<T> 変換は見てくれない。staticclassC{publicstaticvoidM(ReadOnlySpan<object>s){}publicstaticvoidM(Span<object>s){}publicstaticvoidM(IEnumerable<object>s){}publicstaticvoidEx(thisReadOnlySpan<int>_){}}「Span の変数に対して ReadOnlySpan 引数な拡張メソッドを呼べる(のでオーバーロード増やさなくていい)」と、
「ReadOnlySpan なオーバーロードが優先的に呼ばれてくれる」の2点で、
パフォーマンス的なメリットあり。
IEnumerable オーバーロードがあったりすると、「C# 13 と 14 で呼ばれるものが変わる」という破壊的変更一応あり。
(その2つで中身が全然違うみたいな実装することはないと思うので影響は軽微。)
https://github.com/dotnet/csharplang/blob/main/proposals/first-class-span-types.md
VS 17.13 p1 (C# 13 が GA になった瞬間)で merge されてる。
「
Spanの変数に対してReadOnlySpan引数な拡張メソッドを呼べる(のでオーバーロード増やさなくていい)」と、「
ReadOnlySpanなオーバーロードが優先的に呼ばれてくれる」の2点で、パフォーマンス的なメリットあり。
IEnumerableオーバーロードがあったりすると、「C# 13 と 14 で呼ばれるものが変わる」という破壊的変更一応あり。(その2つで中身が全然違うみたいな実装することはないと思うので影響は軽微。)