.NET 9 のプレビュー版で allows ref struct 書けるようになっています。
github.com
パフォーマンスに厳しい用途で使われるライブラリなどで役に立つでしょう。
■ allows ref struct
こんな感じで、Span なんかをジェネリクスで受け入れられるようになります。
var span = "Saitama".AsSpan(); Method1("Saitama"); // これはできる Method2("Saitama"); // これはできる Method1(span); // これはできるようになった //Method2(span); // これはできない CS9244 'ReadOnlySpan<char>' 型は、ジェネリック型またはメソッド 'Method2<T>(T)' のパラメーター 'T' として使用するためには、ref 構造体または ref 構造体を許容する型パラメーターにすることはできません。 static void Method1<T>(T arg) where T : allows ref struct { } static void Method2<T>(T arg) { }
■ 試すために
.csproj ファイルを編集する必要があります。
<LangVersion>preview</LangVersion>
を追加します。これを追加しないと次のエラーになります。
CS8652 機能 'ref 構造体制約を許可します' は現在、プレビュー段階であり、*サポートされていません*。プレビュー機能を使用するには、'preview' 言語バージョンを使用してください。
追加した例です。
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net9.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <LangVersion>preview</LangVersion> </PropertyGroup> </Project>
■ 備えよう
.NET 9。備えよう。