前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#遐想/瞎想

C#遐想/瞎想

作者头像
AhDung
发布2018-09-13 11:11:43
3590
发布2018-09-13 11:11:43
举报
文章被收录于专栏:AhDung
  1. 泛型约束更强大。比如支持有参构造函数、枚举、委托:
代码语言:javascript
复制
void Foo<T>() where T : new(string, int), enum, delegate
  1. 空值判断符允许对属性/字段赋值:
代码语言:javascript
复制
obj?.Name = "sdf"; //obj为null则什么也不做
  1. 索引器支持泛型:
代码语言:javascript
复制
public T this<T>[int i]
{
    get { return (T)arr[i]; } 
    set { arr[i] = value; }
}
  1. 支持将var作为参数类型,代表匿名类型,这样方法就可以返回匿名类型,完了同样用var接住返回值,并可以智能提示返回对象的属性,这就要求方法中每个return的匿名类型要一致。目前可以用dynamic代替,但就没了智能提示:
代码语言:javascript
复制
public static var Create<T1, T2>(T1 arg1, T2 arg2)
{
    return new { Item1 = arg1, Item2 = arg2 };
}
  1. 支持内联out。这点其实在c#6.0差一点实现,但最终没如愿,我猜原因是在变量作用域上不好处理:
代码语言:javascript
复制
if (int.TryParse("3", out int i)) //结合类型推断,甚至连int都允许省略
{
    Use(i);
}
  1. 支持静态索引器:
代码语言:javascript
复制
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"]);
  1. 支持编译为本机exe/dll,准确说这个是对编译器的遐想。我倒不是为了性能,而是一为不要运行库,二为别让我们的源码赤裸裸的暴露在.net reflactor之流中。是有个.net native,但仅限商店应用,而且似乎太监了。
  2. 支持do-until循环句式,只有do-while不幸福。VB、Powershell这些小伙伴都支持,以语法见长的C#竟然不支持,说不通。

暂时就扯这些,有新想法再补上。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-01-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档