在阅读了伟大的书籍"框架设计指南"(2008年11月第2版)的附录A"C#编码风格约定"之后,我对微软使用内部/推荐的编码风格感到困惑.
博客文章C#Style的简史声称:
事实上,"StyleCop风格"和"框架设计指南风格"之间的差异相对较小
在我看来,差异是非常明显的.StyleCop说开放式支架应该在一个单独的线上,框架设计指南说它应该在开幕式之后.StyleCop表示所有关键字后面都有一个空格,框架设计指南说"摆脱所有空间"(甚至围绕二元运算符).
我从框架设计指南书中发现这条规则特别具有讽刺意义(第366页,第6条规则):
不要在流控制语句之前使用空格
Run Code Online (Sandbox Code Playgroud)Right: while(x==y) Wrong: while (x == y)
这明确说明StyleCop样式是错误的(while关键字后面的空格,相等二元运算符之前和之后的空格).
最后,使用StyleCop样式格式化的代码与使用Framework Design Guidelines样式格式化的代码具有完全不同的"感觉".通过遵循框架设计指南样式,人们将不得不禁用一堆规则(并且没有规则检查是否遵守框架设计指南样式......).
有人(MSFT内部人士可能?)对这种分歧有所了解吗?
你的团队如何应对这个问题?关注StyleCop?框架设计指南?完全忽略风格?烘焙自己的风格?
您知道在Visual Studio中,您可以使用"+ ="语法和几个选项卡让它自动生成事件处理程序的代码吗?
我如何在Delphi中完成同样的事情?我正在尝试为我使用导入组件功能导入的不可见activex库中的事件创建事件处理程序.
我意识到,使用导入的activex控件,您只需单击该对象,浏览事件选项卡以获取该组件提供的内容,然后双击该事件以使其为您生成一个.
这些特定的activex组件是不可见的,因此您可以在表单上选择它们.Delphi可以自动生成代码吗?如果没有,有人可以指点我一些示例代码吗?
我有一个巨大的制表符分隔文件,我想在其第二列上排序.我需要使用制表符作为cygwin排序中的字段分隔符.所以我需要这样的东西:
sort -t \t -k 2,2 in.txt > out.txt
Run Code Online (Sandbox Code Playgroud)
但命令提示符按字面计算'\ t'而不是制表符.请注意,我需要在运行Cygwin的Windows机器上执行此操作.变化如
sort -t "\t"
sort -t \"\t\"
Run Code Online (Sandbox Code Playgroud)
不起作用,也没有把它放在cmd文件中,而实际的标签代替上面的\ t.
编辑:使用DOS shell或Cygwin bash shell的解决方案很好.
我经常忘记用于格式化.NET字符串的特殊小代码.通过ToString()或使用String.Format().对齐,填充,月份与分钟(月份是大写M?),缩写与完整单词等等.我永远不会记得.
我和正则表达式有同样的问题,但幸运的是Expresso可以帮助我.这很棒.
是否有像Expresso这样的工具用于在DateTime和float等标准类型上试验格式化字符串?
或者,换句话说,有什么问题 - 例如 -
new Method[] {Vector.add(), Vector.remove()}
Run Code Online (Sandbox Code Playgroud)
Eclipse一直告诉我,我需要参数.但我显然不想调用这些方法,我只是想用它们作为对象!该怎么办?
我目前正在组建一个基于rails的Web应用程序,它只能通过json和xml提供和接收数据.但是,某些要求包含上载二进制数据(图像)的能力.
现在我的理解JSON并不完全是为了那个......但是你如何解决在你的应用程序的两个入口点上接收二进制文件/数据的问题?
当查询中没有聚合时,为什么有人会使用group by而不是?
此外,是否有人知道该组与MySQL和SQL Server中的不同性能注意事项.我猜测SQL Server有一个更好的优化器,它们可能接近等价,但在MySQL中,我期望显着的性能优势.
我对dba的答案感兴趣.
编辑:
比尔的帖子很有趣,但不适用.让我更具体一点......
select a, b, c
from table x
group by a, b,c
Run Code Online (Sandbox Code Playgroud)
与
select distinct a,b,c
from table x
Run Code Online (Sandbox Code Playgroud) 在以下查询中,您认为哪种方法更好?你的理由是什么(代码效率,更好的可维护性,更少的WTFery)......
SELECT MIN(`field`)
FROM `tbl`;
SELECT `field`
FROM `tbl`
ORDER BY `field`
LIMIT 1;
Run Code Online (Sandbox Code Playgroud) 我有用C++编写的应用程序的源代码,我只想用以下方法评论:
#ifdef 0
...
#endif
Run Code Online (Sandbox Code Playgroud)
我得到了这个错误
错误:宏名称必须是标识符
为什么会这样?
在C++的上下文中(并不重要):
class Foo{
private:
int x[100];
public:
Foo();
}
Run Code Online (Sandbox Code Playgroud)
我学到的东西告诉我,如果你像这样创建一个Foo实例:
Foo bar = new Foo();
Run Code Online (Sandbox Code Playgroud)
然后在堆上分配数组x,但是如果你像这样创建了一个Foo实例:
Foo bar;
Run Code Online (Sandbox Code Playgroud)
然后它在堆栈上创建.
我无法在线查找资源以确认这一点.
c# ×2
c++ ×2
mysql ×2
activex ×1
binary ×1
coding-style ×1
conventions ×1
cygwin ×1
delphi ×1
delphi-2007 ×1
distinct ×1
formatting ×1
group-by ×1
heap ×1
java ×1
json ×1
macros ×1
methods ×1
performance ×1
reflection ×1
sorting ×1
sql ×1
sql-server ×1
stack ×1
string ×1
stylecop ×1
xml ×1