C# 实例化一个对象并在一行中调用一个方法?

C# 实例化一个对象并在一行中调用一个方法?,c#,C#,我有很多这样的代码 var o = new SomeClass().DoSomething(someParam); 这是一个设计缺陷吗 此类是某种生成器类。它应该构造其他对象。在样式方面没有问题。 如果在调用DoSomething方法后需要构造SomeClass,这将是一个问题。不,这很好-尤其是在用作构建器的类型中,您可能会经常看到它。例如: string x = new StringBuilder().Append("Foo")

我有很多这样的代码

var o = new SomeClass().DoSomething(someParam);
这是一个设计缺陷吗


此类是某种生成器类。它应该构造其他对象。

在样式方面没有问题。
如果在调用DoSomething方法后需要构造SomeClass,这将是一个问题。

不,这很好-尤其是在用作构建器的类型中,您可能会经常看到它。例如:

string x = new StringBuilder().Append("Foo")
                              .AppendFormat("{0}:{1}", x, y)
                              .ToString();
或在我的协议缓冲区端口中:

Person p = new Person.Builder { Name = "Jon", Age = 35 }.Build();

这里的
Person
类型是不可变的,但是builder类型是不可变的-因此您可以创建一个builder,设置一些属性,然后调用
Build
这不是有缺陷的设计。我想说的是,唯一的问题是可读性,如果您团队的其他成员没有使用这种样式,那么就不要使用它,尤其是在var中,因为它会使您更难理解返回的内容。对我来说,我个人喜欢它,因为我习惯于从jquery链接。

如果调用方法后不需要实例,那么最好在
SomeClass
上使用静态方法,并最终得到

var o = SomeClass.DoSomething(someParam);
如果出于任何原因,您绝对需要一个新实例来执行
DoSomething
,那么您可以创建一个静态工厂方法,使代码更具可读性,如:

var o = SomeClass.GetInstance().DoSomething(someParam)