お試し 技術

C# 13の新機能を使ってみる

今更ですが、C# 13 がリリースされており、.NET 9にC# 13がサポートされているようです
追加された機能や変更点についてはそれぞれMSサイトに記載されています。今回は追加された機能をいくつか紹介します

MSサイト
C# 13 の新機能 | Microsoft Learn
C# 13 の新機能 | Microsoft Learn

C# 13 の新機能の概要について説明します。

MSサイトへ

MSサイト
C# 12 以降の C# コンパイラの破壊的変更 | Microsoft Learn
C# 12 以降の C# コンパイラの破壊的変更 | Microsoft Learn

C# 12 の最初のリリース以降、C# 13 に含まれていた破壊的変更について説明します

MSサイトへ

名称バージョン
C#.Net 9.0

paramsコレクション

params 修飾子は配列型だけでなく、他のコレクション型や Span にも使えるようになりました

static void Main()
{
    PrintNumbers(1, 2, 3, 4); // 配列形式
    PrintNumbers(new List<int> { 5, 6, 7 }); // List<T> 形式
    ReadOnlySpan<int> span = stackalloc int[] { 8, 9, 10 };
    PrintNumbers(span); // Span<T> 形式
}

static void PrintNumbers(params IEnumerable<int> numbers)
{
    foreach (var n in numbers)
    {
        Console.Write(n);
        Console.WriteLine();
    }
}

static void PrintNumbers(params ReadOnlySpan<int> numbers)
{
    foreach (var n in numbers)
    {
        Console.Write(n);
        Console.WriteLine();
    }
}

新しいLockオブジェクトとロック構文の改善

これまでのロックだとパフォーマンスに影響を与えていましたが、Lockオブジェクトを使用することで簡単にパフォーマンスを向上することができるようになります

 private static Lock myLock = new Lock();

 static void Main()
 {
     using (myLock.EnterScope()) 
     { 
         Console.WriteLine("新しい Lock.EnterScope スコープ内"); // 排他制御がここで効く
     }
 }

新しいエスケープシーケンス

ESCAPE (U+001B) 用に「\e」が使えるようなり可読性が向上します

Console.WriteLine("Before ESC [bold]\\e[1mBold text\\e[0m After ESC");

初期化子内での末尾からのインデックス

オブジェクト初期化子内で、^ 演算子を使って末尾からのインデックス指定が可能になりました

class Buffer 
{
    public int[] Data { get; set; } = new int[5];
}

var buf = new Buffer()  {
    Data = {
        [^1] = 99, // 要素の後ろから1番目
        [^2] = 88  // 要素の後ろから2番目
    }

};
Console.WriteLine(string.Join(", ", buf.Data)); // 出力例: 0, 0, 0, 88, 99

部分プロパティとインデクサー

部分プロパティとインデクサーを partial 型で定義、実装を分けられるようになりました

// PartialTest1.cs
partial class PartialTest
{
    public partial string Name { get; set; }
    public partial int this[int i] { get; set; }
}

// PartialTest2.cs
partial class PartialTest
{
    // 実装部分(アクセサー本体)
    public partial string Name { get => _name; set => _name = value; }
    
    private string _name = "";
    
    public partial int this[int i] { get => _data[i]; set => _data[i] = value; }

    private int[] _data = new int[10];
}

// Program.cs
static void Main()
{
    var partialTest = new PartialTest();
    partialTest.Name = "Test";
    partialTest[3] = 42;
    Console.WriteLine(partialTest.Name + ", " + partialTest[3]);  // 出力例: Test, 42
}

紹介したものの実際の使用方法についてはパッとは思いつかないので、やはり勉強を続ける必要があります
また、今回紹介したもの以外にもいくつかあるので、確認してみてください

会社紹介

私が所属しているアドバンスド・ソリューション株式会社(以下、ADS)は一緒に働く仲間を募集しています

会社概要
「技術」×「知恵」=顧客課題の解決・新しい価値の創造

この方程式の実現はADSが大切にしている考えで、技術を磨き続けるgeekさと、顧客を思うloveがあってこそ実現できる世界観だと思っています
この『love & geek』の精神さえあれば、得意不得意はno problem!
技術はピカイチだけど顧客折衝はちょっと苦手。OKです。技術はまだ未熟だけど顧客と知恵を出し合って要件定義するのは大好き。OKです
凸凹な社員の集まり、色んなカラーや柄の個性が集まっているからこそ、常に新しいソリューションが生まれています

ミッション
私たちは、テクノロジーを活用し、業務や事業の生産性向上と企業進化を支援します

ホームページ
アドバンスド・ソリューション株式会社|ADS Co., Ltd.
アドバンスド・ソリューション株式会社|ADS Co., Ltd.

Microsoft 365/SharePoint/Power Platform/Azure による DX コンサル・シス ...

サイトへ移動

PR

-お試し, 技術
-