6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C#13の部分プロパティとMVVM Toolkit(ver9?)

Last updated at Posted at 2024-10-12

C#13の新機能:部分プロパティ

.NET9と同時にリリース予定の C# 13 では「部分プロパティ」がやっと導入される見込みです。これの何が嬉しいかというと、ソースジェネレータがプロパティにも対応できるという事です。

例えばC# 11/NET 7 で導入された[GeneratedRegex](正規表現の高速化)は部分メソッドで生成されていましたが、部分プロパティでもっと自然に書けます。

//部分メソッド(C#11)で書いた場合
[GeneratedRegex("abc|def")]
private static partial Regex AbcOrDefMethod();

if (AbcOrDefMethod().IsMatch(text)) {  //ちょっと違和感がある書き方
}

//部分プロパティ(C#13)導入後
[GeneratedRegex("abc|def")]
private static partial Regex AbcOrDefProperty { get; }
 
if (AbcOrDefProperty.IsMatch(text)) { //自然体でかける
}

MVVM ToolKitで部分プロパティ対応

となると期待されるのが、MVVM ToolKitで違和感のある書き方だった[ObservableProperty]の改善です。

以前の紹介記事「.NET用 MVVM Toolkit v8でMVVMコードを短く」に書いたようにver8では変更通知プロパティは以下のようにバッキングフィールドを書いています。

MVVM ToolKit ver8
[ObservableProperty]
private string name;

これで変更通知対応したNameプロパティが生成されますが、コード上に無いため間違えやすく、現在はアナライザーを使って「nameじゃなくて Name を使ってね」と警告が出してしのいでます。
これは部分プロパティが導入されれば解決できるはずです。

MVVM ToolKit ver9? なら?
[ObservableProperty]
public partial string Name { get; set; }

MVVM ToolKit側では 昔から要望が上がっていたのですが、部分プロパティのC#への導入が前回見送られたのでToolKit側も見送られました。
しかしMVVM ToolKit ver9 ではかなり前からこの機能はバックログに積まれています。早めに実現されるとうれしいですね。

GitHub: CommunityToolkit/Projects/9.0
https://github.com/orgs/CommunityToolkit/projects/6/views/1

2024年11月17日追記

C#13/.NET9もリリースされ、このPRが無事マージされたようです。
が、C#13にプロパティの「field」キーワードが導入されなかったことで現時点ではLangVersion=preview(C#14相当)が必要になるようです。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?