可以,c# 9.0 起支持在 var 声明中直接使用集合表达式。只需将目标类型替换为 var,编译器会根据初始化器中的元素自动推断出具体的集合类型(如 list)。

var 声明列表时推断的具体类型是什么
当使用 var 配合花括号语法初始化列表时,编译器会将其推断为 System.Collections.Generic.List,其中 T 是元素类型的公共基类或接口。

using System;
using System.Collections.Generic;
var numbers = new() { 1, 2, 3 };
Console.WriteLine(numbers.GetType().Name); // List`1
Console.WriteLine(numbers is List<int>); // True</int>
var 声明数组与列表的区别在哪里
虽然两者都支持集合表达式,但 var 对数组的推断要求必须显式指定维度或使用 new[] 语法,而列表则完全依赖上下文推断。

using System;
using System.Collections.Generic;
// 推断为 int[]
var array = new[] { 1, 2, 3 };
Console.WriteLine(array.GetType().Name); // Int32[]
// 推断为 List`1
var list = new() { 1, 2, 3 };
Console.WriteLine(list.GetType().Name); // List`1
如果集合表达式中包含不同类型元素,var 会如何推断
如果初始化器中的元素类型不一致,编译器会寻找它们的公共基类或接口作为 T。若找不到合适的公共类型,则会报错。










