3

我忙于深入研究多线程和死锁等问题。这本书同时针对伪代码和 C 代码,我忙于研究诸如互斥锁和监视器之类的实现。

这让我想到了以下几点;在 C# 和事实上 .NET 中,我们有很多语法糖来做事。例如(.NET 3.5):

lock(obj)
{
   body
}

等同于:

var temp = obj;

Monitor.Enter(temp);

try 
{ 
   body 
}
finally 
{ 
   Monitor.Exit(temp); 
}

当然还有其他示例,例如using() {}构造等。我的问题是,什么时候更适用于“单独行动”并自行编写代码而不是使用语言中的“语法糖”?是否应该使用他们自己的方式,而不是那些在你编码的语言方面更有经验的人?

我记得以前不必Process在块中使用对象using来帮助解决一些多线程问题和无限循环。我仍然因为那里没有 using 构造而感到肮脏。

谢谢,

凯尔

4

4 回答 4

11

尽可能地坚持语法糖。它简洁,更易于维护,不易出错,易于理解,他们创建它是有原因的。

如果您必须手动控制某些东西(例如操作 anIEnumerator<T>而不是使用foreach),那么是的,放弃语法糖。否则,习惯用语是一件好事。

于 2010-05-14T05:37:47.113 回答
7

软件开发的最大成本是长期维护,因此答案始终是,做能够为您提供最简单和最具成本效益的维护路径的事情(除了所有可能证明规则的例外情况,例如 perf)。如果您可以使用语法糖来使您的代码更具可读性,那么这就是您的答案,如果语法糖妨碍您,那就不要使用它。

于 2010-05-14T05:36:25.847 回答
2

在 C# 中,此 linq 语句:

var filteredCities =
    from city in cities
    where city.StartsWith("L") && city.Length < 15
    orderby city
    select city;

是(和等价于)的语法糖:

var filteredCities =
  cities.Where(c => c.StartsWith("L") && c.Length < 15))
    .OrderBy(c => c)
    .Select(c => c); 

如果你对 C# 很熟悉,后一个版本比前一个版本更容易区分;您可以确切地看到它在幕后所做的事情。

然而,对于典型的日常使用,大多数人发现加糖版本更清晰,更易于阅读。

于 2010-05-14T05:34:10.407 回答
1

您无法使用using构造的示例是我与 .Net 语言和框架中提供的新方法最常见的偏差。在很多情况下,IDisposable 对象的范围有点超出单个函数。

但是,了解这些快捷方式的作用仍然与以往一样重要。我确实认为如果不能将对象包装在 中,很多人根本不会处理它using,因为他们不了解它的作用以及它使什么变得更容易。

因此,我确实希望其中一些出色的快捷方式有类似工具提示帮助文本之类的东西,这表明正在发生一些重要的事情——甚至可能是不同的关键字颜色。

编辑:

我一直在考虑这个问题,我认为我认为using这只是一个误导性的关键词。foreach完全按照听起来的样子,而using对我来说并不意味着实际发生了什么。有人对此有任何想法吗?如果他们的关键字已经disposing改为;你认为它会更清楚吗?

于 2010-05-14T06:27:51.183 回答