3
public static class Th
{
    public static T e<T>(T theObject) where T : class
    {
        return theObject;
    }        
}

public static class ObjectExtensions
{
    public static bool Is<T>(this T o, Func<T, bool> a) where T : class
    {
        return a(o);
    }
}

//...

//logic in a method somewhere
Func<string, bool> valid = property => _myService.SomeValidationMethod(property);

if (Th.e(_request.Property).Is(valid))
{
   //do something
}

这段代码适合生产吗?为什么?

编辑:感谢您的所有评论。我希望您在阅读我将 C# 语法延伸到断点时获得的乐趣,就像阅读您的回复一样。

4

4 回答 4

5

我对流利的 API 没有任何问题,但这似乎违反了最不意外的原则。我不明白名为的类Th或名为的方法的目的e

于 2011-01-31T21:41:05.620 回答
2

是什么让您认为这段代码“流利”?

这绝对不是流利的,也不是自我记录的。

于 2011-01-31T21:41:12.320 回答
2

那太远了。不,代码不适合生产。Th.e既不是正确措辞的散文,也不是恰当命名的代码——在这两种情况下都是没有意义的。

于 2011-01-31T21:42:24.127 回答
1

虽然您所说的“流畅性”非常重要,而大多数开发人员都忽略了这一点(即使是真正关心这一点的人,例如 CS 算法编写者),您向我们展示的代码风格滥用了语言的可表达性并且不是很有用,IMO ,有两个原因:

  • if (_request.Property.Is(valid))Th即使没有这些类和Th.e方法,也足够“流利” ;
  • 由于这种“流畅性”,您正在失去宝贵的标识符。如果您需要验证另一个对象怎么办?你做if (Th.e(_request.Property2).Is(valid))if (Th.e(_request2.Property).Is(valid))?如果您需要进行另一项测试怎么办?你if (Th.e(_request.Property).Is(valid2))呢?
于 2011-01-31T22:35:50.033 回答