c# 的编码风格有点独树一帜呀 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题复制粘贴 AI 生成的内容
weakish
V2EX    程序员

c# 的编码风格有点独树一帜呀

  •  
  • /div>   weakish
    weakish 2014-03-11 17:24:28 +08:00 7803 次点击
    这是一个创建于 4300 天前的主题,其中的信息可能已经有所发展或是发生改变。
    GitHub提供了一些分析数据的接口api,sideeffect.kr 利用这些api分析了托管在GitHub上的公开的C#代码,统计出了一些结论。

    统计结果: http://segmentfault.com/a/1190000000430024


    和别的语言有点不一样,c#的if等语句,大括号基本上都换行:

    另起一行(84.961 %)

    很多语言里都有是否另起一行的圣战。。。

    常量命名,一般语言,大部分是全大写,但是c#是三足鼎立:

    驼峰(35.304 %)

    全大写(32.093 %)

    其他 (32.603 %)

    ----

    有 C# coder 熟悉这背后的原因么?或者讲讲你自己惯用的风格?
    32 条回复    1970-01-01 08:00:00 +08:00
    cxe2v
        1
    cxe2v  
       2014-03-11 17:36:21 +08:00
    你第一次看到的代码长什么样,基本上你以后的风格就定那样了
    jsonline
        2
    jsonline  
       2014-03-11 17:47:51 +08:00 via Android
    这很重要么
    zhujinliang
        3
    zhujinliang  
       2014-03-11 17:54:02 +08:00   2
    C#大括号占一行是VS IDE自动格式化的,因为微软有给力的IDE,绝大多数C#程序员都用VS开发。占少部分的可能是Mono派。

    变量/类命名一般是驼峰,常量是全大写,这个一般是从C过来的,IDE没有帮忙格式化
    solo7net
        4
    solo7net  
       2014-03-11 17:55:07 +08:00
    用过VS就知道 你写个if 按下tab
    caoyue
        5
    caoyue  
       2014-03-11 18:01:33 +08:00   1
    我猜那篇文章提出的大多数现象的归根到底都是C# 程序员更多的使用 VS ?
    VS 自动格式化的结果完全符合这些规律
    而常量命名刚好是 VS 格式化不涉及的,大家就各显神通了

    而且 .NET 的源码风格也是不统一的,比如 if、 class 的花括号有时候换行有时候不换行
    tonghuashuai
        6
    tonghuashuai  
       2014-03-11 18:13:31 +08:00
    我写的时候就是按 VS 推荐的格式,大括号单独占一行……
    xuan_lengyue
        7
    xuan_lengyue  
       2014-03-11 18:21:05 +08:00   1
    因为 VS 里面花括号默认就是单独一行的,而写 C# 的应该基本上都用的是 VS 吧。。。
    最近在写 C#,大量的判断是否为 null,要是不判断很容易就来个 Null Pointer Exception。。。
    这到底是 C# 问题还是我自己的问题。。。
    vibbow
        8
    vibbow  
       2014-03-11 19:00:54 +08:00
    因为VS默认就是这样的...
    min
        9
    min  
       2014-03-11 19:01:10 +08:00
    @xuan_lengyue 你代码的问题
    Ricepig
        10
    Ricepig  
       2014-03-11 19:50:59 +08:00
    @xuan_lengyue 这类语言就这样,Null是需要判断的。不过实际上也没什么别的好办法,ruby那样给个默认值有的时候更容易出了问题不知道。
    wingoo
        11
    wingoo  
       2014-03-11 19:54:11 +08:00
    写过几年cs
    大括号之类的一般都单独一行
    命名用驼峰, 常量大写

    @xuan_lengyue 对外接口一般都判断再判断, 内部自己用的函数, 注释上写个约定
    AstroProfundis
        12
    AstroProfundis  
       2014-03-11 20:46:26 +08:00
    因为 Visual Studio 的默认设置就是这样的,会自动格式化代码;可以自己修改,比如我就改成不换行了...
    maddemon
        13
    maddemon  
       2014-03-11 21:12:23 +08:00
    C#命名规范:
    私有字段 _xxYyZz
    局部变量、参数名 xxYyZz
    方法名、类名、公开属性、常量、只读变量 XxYyZz
    接口 IXxYyZz
    maddemon
        14
    maddemon  
       2014-03-11 21:13:02 +08:00
    纠正:只读变量->只读字段
    Linxing
        15
    Linxing  
       2014-03-11 21:22:11 +08:00
    VS是会自动大括号单独一行的吧,还有自动加空格之类的,导致现在看到大括号没有单独一行的,都要改一下,强迫症了。。
    NauhiL
        16
    NauhiL  
       2014-03-11 21:37:19 +08:00
    @xuan_lengyue VS不会自己判断变量是否为空,需要自己写个公共方法去判断对象或者变量是不是null
    ooh
        17
    ooh  
       2014-03-11 21:39:05 +08:00
    论:使用文本编辑器对你人生代码风格的影响
    rebornix
        18
    rebornix  
       2014-03-11 22:27:27 +08:00   1
    我基本按照Resharper的要求来命名,IDE帮忙format code确实便于代码阅读。
    zhujinliang
        19
    zhujinliang  
       2014-03-11 23:55:46 +08:00 via iPad
    @Ricepig 印象中没有这么严重啊。很多情况下可以考虑使用try catch进行简单处理,不管它是返回了什么,只要后面哪个不高兴了给出个exception,直接catch了走错误处理路线
    tangzx
        20
    tangzx  
       2014-03-12 00:57:44 +08:00 via iPhone
    .NET2001年才出来,完全没有历史负担,所以.NET内裤的命名规范异常统一

    其他的基本上各种历史原因什么unix什么c什么大神什么xxxxnic当然宗教战争啦
    zkd8907
        21
    zkd8907  
       2014-03-12 07:39:24 +08:00
    @rebornix Resharper真心好用,就是资源吃太多了。
    rebornix
        22
    rebornix  
       2014-03-12 09:56:03 +08:00
    @zkd8907 或者乃也可以试试打开stylecop,坐看自己的project被爆
    zkd8907
        23
    zkd8907  
       2014-03-12 10:00:56 +08:00
    @rebornix 我才不要自虐,而且我写的代码尤其是注释,里面连颜文字都有,被干是必须的。
    soli
        24
    soli  
       2014-03-12 10:27:56 +08:00
    空格缩进的竟然 80% 以上了。。。
    理解不能。
    rainysia
        25
    rainysia  
       2014-03-12 11:14:38 +08:00
    5年前写c#的时候用过SharpDevelop... 现在主力gvim
    soundbbg
        26
    soundbbg  
       2014-03-12 11:19:24 +08:00
    说实话这个还是看团队风格,团队风格看团队水平。有很多东西其实也没有那么重要。
    imwower
        27
    imwower  
       2014-03-12 12:42:49 +08:00
    使用vs默认的就最好,省去制定规范的时间了。其他语言也应如此。
    foxidea
        28
    foxidea  
       2014-03-12 13:07:49 +08:00
    IDE 已经规范好了代码风格,不需要再 过多的精力去关注代码风格,vs 很赞
    Narcissu5
        29
    Narcissu5  
       2014-03-12 13:13:50 +08:00
    微软出过一个C#代码规范,我记得有两条就是大括号另起一行,if while后面的语句即使只有一行也要括起来。

    @xuan_lengyue C# 6 会有monad

    foo?.foo1?.foo2?

    任何一个为空都返回null
    dieaz5
        30
    dieaz5  
       2014-03-12 14:30:27 +08:00
    我就是c#的,基本上,c#的都是vs惯出来的
    msg7086
        31
    msg7086  
       2014-03-12 15:17:04 +08:00
    VS+Resharper
    weakish
        32
    weakish  
    OP
       2014-03-13 13:58:58 +08:00
    @soli [tab和空格缩进被认为是永恒的圣战](http://www.jwz.org/doc/tabs-vs-spaces.html) 不过现在大多数人都是空格缩进了(不论使用什么语言)。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3787 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 05:23 PVG 13:23 LAX 21:23 JFK 00:23
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86