Skip to content

First-class Span Types #479

Description

@ufcpp

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つで中身が全然違うみたいな実装することはないと思うので影響は軽微。)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions