Tag: 可读性

使用true和false作为条件运算中的表达式

我正在维护一些代码,并且发现了以下模式: var isMale = (row[“Gender”].ToString() == “M”) ? true : false; 而不是这个: var isMale = (row[“Gender”].ToString() == “M”); 是否有人会这样做? 有人认为前者更具可读性或更清晰吗? 是否有某种旧的C“陷阱”,这是一个保留吗?

foreach(… in …)或.ForEach(); 这就是问题

可能重复: C#foreach vs functional each 这是关于编码可读性的问题。 我有一个XDocument和一个List包含我需要屏蔽的敏感信息的元素名称(在本例中用下划线替换)。 XDocument xDoc; List propertiesToMask; 这可以用两种方式编写,使用传统的foreach循环,或使用带有lamba语法的.ForEach方法。 foreach (string propertyToMask in propertiesToMask) { foreach (XElement element in xDoc.Descendants(propertyToMask)) { element.SetValue(new string(‘_’, element.Value.Length)); } } 要么 propertiesToMask .ForEach(propertyToMask => xDoc.Descendants(propertyToMask).ToList() .ForEach(element => element.SetValue(new string(‘_’, element.Value.Length)))); 您认为哪种方法最易读,为什么? 如果您更喜欢第二个示例,您将如何呈现它以获得最大可读性?

在多次执行相同的SQL查询时重用SqlCommand是否更好?

使用相同的查询但不同的参数查询数据库时,最好是: 一次性使用, 或创建两个单独的查询? 单个使用示例: using (SqlCommand addProduct = new SqlCommand(@”insert into [Products].[Products] ([Name], [Price]) values (@name, @price)”, sqlConnection)) { // Insert the first product. addProduct.Parameters.AddWithValue(“@name”, “Product 1”); addProduct.Parameters.AddWithValue(“@price”, 41F); int countAffectedRows = addProduct.ExecuteNonQuery(); Debug.Assert(countAffectedRows == 1, “Wrong number of rows affected.”); addProduct.Parameters.Clear(); // Insert the second product. addProduct.Parameters.AddWithValue(“@name”, “Product 2”); addProduct.Parameters.AddWithValue(“@price”, 49.9); countAffectedRows = addProduct.ExecuteNonQuery(); […]

方法优化

我有一个void函数,其中包含很多if语句,所有这些都是必需的,我真的无法删除任何东西。 但我觉得它可以做得更好。 使用一些LINQ.Where ,类或类似的东西。 我想在尽可能少的字符中优化和表达void Smooth : void Smooth(ref int botChips, ref bool botTurn, Label botStatus, int name, int n, int r) { Random rand = new Random(); int rnd = rand.Next(1, 3); if (rounds == 0 || rounds == 1) { if (call = RoundN(botChips, n)) { Call(ref botChips, ref botTurn, botStatus); } else […]

参考平等性能差异? ((object)obj1 ==(object)obj2)vs。object.ReferenceEquals(obj1,obj2)

使用object.ReferenceEquals方法是否有额外的开销((object)obj1 == (object)obj2) ? 在第一种情况下,将涉及静态方法调用,并且在两种情况下都涉及到对象的某种forms的转换。 即使编译器平衡了那些方法,那么不等式呢? (object)obj != null 相比于… !object.ReferenceEquals(obj,null) 我想在某些时候,会在!=运算符内发生逻辑否定,或者应用于ReferenceEquals方法的结果。 你怎么看? 还有可读性问题需要考虑。 在检查相等性时,ReferenceEquals似乎更清晰,但对于不平等,可能会错过! 在object.ReferenceEquals之前,而第一个变体中的!=很难被忽视。

在C#中计算“中位数为5”的代码

注意:请不要将此解释为“作业问题”。 这只是我很想知道的事情:) 中值为5有时用作算法设计中的练习,并且已知仅使用6次比较可计算。 在C# 中实现“使用6次比较的五个中值”的最佳方法是什么? 我所有的尝试似乎都导致代码笨拙:(我需要漂亮可读的代码,同时仍然只使用6次比较。 public double medianOfFive(double a, double b, double c, double d, double e){ // // return median // return c; } 注意:我想我也应该提供“算法”: 我发现自己无法像Azereal在论坛post中那样清楚地解释算法。 所以我会在这里引用他的post。 来自http://www.ocf.berkeley.edu/~wwu/cgi-bin/yabb/YaBB.cgi?board=riddles_cs;action=display;num=1061827085 好吧,我在我的一个任务中提出了这个问题,我转向这个论坛寻求帮助,但没有帮助。 我终于找到了怎么做。 使用前4个元素启动mergesort并订购每对(2个比较) 比较每对中的两个较低的一个并从可能性中消除最低的一个(3个比较) 在没有配对的情况下添加第5个数字并比较两个(4个比较) 比较两个新对中的两个最低对并消除较低对(5个比较) 比较一个单独和最后一对中的较低者,较低的数字是中位数 可能的中位数在肠胃外 (54321) 5:4 3:2 2比较 (4 <5 2 <3 1) 4:2 3比较 2(4 <5 3 1) 1:3 4比较 […]