-
-
Notifications
You must be signed in to change notification settings - Fork 40
Open
Labels
Description
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 でも OK
Span<string> s = [];
ReadOnlySpan<object> s2 = s; // これは 13 だとエラー。
C.M(new object[1]); // これは 13 だと ambiguous。preview だと Span っぽい。ReadOnlySpan にするみたいな話はみた。
new int[1].Ex(); // 13 だと拡張メソッドでの T[] → ROS<T> 変換は見てくれない。
static class C
{
public static void M(ReadOnlySpan<object> s) { }
public static void M(Span<object> s) { }
public static void M(IEnumerable<object> s) { }
public static void Ex(this ReadOnlySpan<int> _) { }
}
「Span
の変数に対して ReadOnlySpan
引数な拡張メソッドを呼べる(のでオーバーロード増やさなくていい)」と、
「ReadOnlySpan
なオーバーロードが優先的に呼ばれてくれる」の2点で、
パフォーマンス的なメリットあり。
IEnumerable
オーバーロードがあったりすると、「C# 13 と 14 で呼ばれるものが変わる」という破壊的変更一応あり。
(その2つで中身が全然違うみたいな実装することはないと思うので影響は軽微。)