You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 12中能否为匿名类型创建using别名?

为C# 12中的匿名类型创建using别名的可行方式

你遇到的编译错误CS1041是因为new { Name = "John", Age = 42 }是实例创建表达式,而C#的using别名指令要求的是类型引用(而非实例),所以编译器会提示需要合法的类型标识符。

虽然匿名类型没有显式名称,但借助C# 12对using别名的扩展规则,我们可以通过以下方式为其创建别名:

实现步骤

  1. 先声明一个匿名类型的临时变量(仅用于让编译器捕获该类型的编译时信息,可用下划线_作为变量名避免后续误用);
  2. 通过typeof(临时变量)获取该匿名类型的Type,并用using别名指向这个类型。

示例代码

// 临时变量:仅用于让编译器推导匿名类型的编译时类型
var _ = new { Name = "John", Age = 42 };
// 为该匿名类型创建using别名
using AnonymousMagic = typeof(_);

// 使用别名声明变量(需结合强制转换)
AnonymousMagic person = (AnonymousMagic)new { Name = "Alice", Age = 30 };

// 借助模式匹配访问匿名类型的属性
if (person is { Name: string name, Age: int age })
{
    Console.WriteLine($"{name}, {age}");
}

// 或使用dynamic类型访问属性
dynamic dynPerson = person;
Console.WriteLine($"{dynPerson.Name}, {dynPerson.Age}");

注意事项

  • 同一个程序集中,结构完全一致(属性名称、类型、顺序均相同)的匿名类型会被编译器视为同一个类型,因此同结构的匿名实例可以强制转换为该别名类型;
  • 匿名类型是密封类且继承自object,直接通过别名声明的变量无法直接访问属性,需通过模式匹配、反射或dynamic类型来操作属性。

内容的提问来源于stack exchange,提问作者Thomas W.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 13:52:36