在IF条件中实例化对象

时间:2014-10-07 16:49:00

标签: c# asp.net .net wcf coding-style

我有一个类CheckValues(someVar)的类,它在获取一个正在检查为null或先清空的参数后返回true或false。在通过IIS运行的WCF服务中以及在多线程应用程序中调用此类的方法。以下两种方式中的哪一种更好?

1:

MyClass obj = new MyClass();

if( !String.IsNullOrEmpty(someVar) && obj.CheckValues(someVar))
{
    ...
}

2:

if( !String.IsNullOrEmpty(someVar) && new MyClass().CheckValues(someVar))
{
    ...
}

第一种方法非常传统。第二个给我的好处是,只有当变量someVar有一些值时才能创建一个对象,而不是其他。

第二种方法有问题,还是不好的做法?这个变量是值类型还是引用类型是否重要?

2 个答案:

答案 0 :(得分:3)

第二个代码段没有任何内在的坏处。事实上,正如您所指出的那样,这将优先于第一次。

那说,闻起来坏。为什么要为一次使用创建一个对象,调用没有参数的方法?该方法是否应该是静态的,因为它不需要状态?你应该重用一个现有的对象吗?

我看到的主要问题是该逻辑的存在表明您的设计中的其他地方存在问题。

致评论:

  1. 参数的存在并没有真正改变气味;因为您仍在为单个函数调用创建一次性使用对象。

  2. 鉴于您的第二条评论,设计可能是合理的。确保该对象 nothing 但生成处理检查所需的状态。如果它是一个大型对象,你只是简单地介绍了一堆开销。

答案 1 :(得分:1)

你可以使CheckValues()静态方法,然后你就不必让类的对象来调用它。