流利的C#到目前为止还有多远?

时间:2011-01-31 21:37:47

标签: c# coding-style fluent-interface

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 个答案:

答案 0 :(得分:5)

我对流畅的API没有任何问题,但这似乎违反了最少惊喜的原则。我不理解名为Th的类的目的,也不了解名为e的方法。

答案 1 :(得分:2)

是什么让你觉得这段代码“流利”?

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

答案 2 :(得分:2)

太过分了。不,代码不适合生产。 Th.e既没有正确的措辞散文也没有恰当命名的代码 - 在两种语境中都没有意义。

答案 3 :(得分: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))