- 泛型约束更强大。比如支持有参构造函数、枚举、委托:
void Foo<T>() where T : new(string, int), enum, delegate
- 空值判断符允许赋值:
obj?.Name = "sdf"; //obj为null则什么也不做
- 索引器支持泛型:
public T this<T>[int i] { get { return (T)arr[i]; } set { arr[i] = value; } }
- 支持将var作为参数类型,代表匿名类型,这样方法就可以返回匿名类型,完了同样用var接住返回值,并可以智能提示返回对象的属性。目前可以用dynamic代替,但就没了智能提示:
public static var Create<T1, T2>(T1 arg1, T2 arg2) { return new { Item1 = arg1, Item2 = arg2 }; }
- 支持内联out。这点其实在c#6.0差一点实现,但最终没如愿,我猜原因是在变量作用域上不好处理:
if (int.TryParse("3", out int i)) //结合类型推断,甚至连int都允许省略 { Use(i); }
- 支持静态索引器:
public static class Package { static readonly Dictionary<string, int> _dic; static Package() { _dic = new Dictionary<string, int>(3); _dic.Add("a", 0); _dic.Add("b", 1); _dic.Add("c", 2); } public static int this[string name] { get { return _dic[name]; } set { _dic[name] = value; } } } // use example Use(Package["b"]);
暂时就扯这些,有新想法再补上。
时间: 2024-10-28 21:15:16