【发布时间】:2011-03-03 00:24:34
【问题描述】:
我看到系统命名空间中提供的委托类型的使用越来越多(Action<T>;Predicate<T> 等)。由于这些是委托,我的理解是它们应该用于我们过去传统上使用委托的地方(异步调用;启动线程,事件处理等)。在以下场景中使用这些委托类型只是偏好还是被认为是一种做法;而不是调用我们声明的方法(或匿名方法):
public void MyMethod()
{
Action<string> action = delegate(string userName
{
try
{
XmlDocument profile = DataHelper.GetProfile(userName);
UpdateMember(profile);
}
catch (Exception exception)
{
if (_log.IsErrorEnabled) _log.ErrorFormat(exception.Message);
throw (exception);
}
};
GetUsers().ForEach(action);
}
起初,我发现代码不像使用声明或匿名方法那样直观。我开始用这种方式编码,想知道这方面的观点是什么。上面的例子都在一个方法中。此委托是否过度使用?
【问题讨论】:
-
此代码可能在正确的门后:osnews.com/story/19266/WTFs_m 如果函数式编程适合您,请考虑使用 F#。
-
感谢您的回答(以及出色的链接)。是的!当您第一次看到以这种方式编码的内容时,我同意存在 WTF 的事实。但就像任何新事物一样,总会有一个 WTF 时刻,直到你花时间去看看它并弄清楚它。在此之后,您识别未来的模式,不再有 WTF。如果这种编码方式没有问题(比如性能);这可以仅仅被认为是一种“风格”的编码吗?