以下の内容はhttps://rksoftware.hatenablog.com/entry/2025/03/02/230000より取得しました。


C# 14 ~.NET 10 世代の C# ~ を試す

.NET 10 Preview 1 が出ています。

その中で C# 14 の機能も入っています。内容はこちらの公式で。
github.com

読んでもよくわからないので書いてみましょう。

■ 書いてみた。

こんな感じでしょうか? 難しいのが多いですね。

using System;

Console.WriteLine();

// -- Field-backed properties --
class C
{
    // これは以前からできた
    int p1;
    public int P1
    {
        get => p1;
        set => p1 = (value > 0)
            ? value + 1
            : -1;
    }
    // これができるようになった
    public int P2
    {
        get;
        set => field = (value > 0)
            ? value + 1
            : -1;
        // Preview バージョンを指定していない場合のエラー
        // 機能 'field キーワード' は現在、プレビュー段階であり、*サポートされていません*。プレビュー機能を使用するには、'preview' 言語バージョンを使用してください。
    }
}
// -- Unbound generic support for nameof --
static class C2
{
    internal static void M()
    {
        // これは以前からできた
        Console.WriteLine($"名前は {nameof(List<int>)} です");   // 名前は List です
        // これができるようになった
        Console.WriteLine($"名前は {nameof(List<>)} です");   // 名前は List です
        // Preview バージョンを指定していない場合のエラー
        // 機能 'nameof 演算子でバインドされていないジェネリック型' は現在、プレビュー段階であり、*サポートされていません*。プレビュー機能を使用するには、'preview' 言語バージョンを使用してください。
    }
}
// -- Implicit Span conversions --
static class C3
{
    static void M1<T>(this IEnumerable<T> enu) {; }
    static void M2<T>(this Span<T> span) {; }

    internal static void M()
    {
        // これは以前からできた
        new int[] { }.M1();
        // これができるようになった
        new int[] { }.M2();
        // Preview バージョンを指定していない場合のエラー
        // 'int[]' に 'M2' の定義が含まれておらず、型 'int[]' の最初の引数を受け付けるアクセス可能な拡張メソッド 'M2' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足していないことを確認してください

        // これはできない
        List<object> list = new List<string>();
        Span<object> span1 = new Span<string>();
        // 型 'System.Collections.Generic.List<string>' を 'System.Collections.Generic.List<object>' に暗黙的に変換できません
        // 型 'System.Span<string>' を 'System.Span<object>' に暗黙的に変換できません
        // これができるようになった
        ReadOnlySpan<object> span2 = new ReadOnlySpan<string>();
        // Preview バージョンを指定していない場合のエラー
        // 型 'System.ReadOnlySpan<string>' を 'System.ReadOnlySpan<object>' に暗黙的に変換できません
    }
}
// -- Modifiers on simple lambda parameters --
static class C4
{
    public delegate string Func1(ref string arg1, in string arg2, out string arg3);

    internal static void M()
    {
        // これは以前からできた
        Func1 func2 = (ref string s1, in string s2, out string s3) => s3 = s1 + s2;
        // これができるようになった
        // Preview バージョンを指定していない場合のエラー
        Func1 func3 = (ref s1, in s2, out s3) => s3 = s1 + s2;
        // 機能 'simple lambda parameter modifiers' は現在、プレビュー段階であり、*サポートされていません*。プレビュー機能を使用するには、'preview' 言語バージョンを使用してください。
    }
}

■ 参考

Implicit Span conversions は全然わからなかったので、参考にさせていただきました。

ufcpp.net




以上の内容はhttps://rksoftware.hatenablog.com/entry/2025/03/02/230000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14