检查参数值是否为null,然后初始化对象。这是个好主意吗?

时间:2014-08-28 08:49:09

标签: c#

目前,我正在维护一个不是由我开发的程序,在我们的代码的很多部分中我们有类似的东西

public BookingItemResponse(BookingItem[] BookingItems,Currency="USD", string bookingName=null, string passengerEmail =null)
{
    Request.BookingItem[]=BookingItems;
    if(bookingName!=null) Request.BookingName=bookingName;
    if(passengerEmail!=null) Request.PassengerEmail=passengerEmail;

    return BookingItemResponse
}

是否有必要检查参数是否为空,然后初始化我的目标对象?

如果我只是删除ifs并只写下面的内容

Request.BookingName=bookingName;

请注意,请求对象将在最后序列化。并且响应将被反序列化并返回为BookingItemResponse。

哪一项性能更优化?

3 个答案:

答案 0 :(得分:2)

public BookingItemResponse(BookingItem[] BookingItems,Currency="USD", string bookingName=null, string passengerEmail =null)
{

    Request.BookingItem[]=BookingItems;

    //If the default value is null you can remove the ifs
    Request.BookingName=bookingName;
    Request.PassengerEmail=passengerEmail;

    //else you can use the ?? operator
    Request.BookingName=bookingName ?? "Your default value";
    Request.PassengerEmail=passengerEmail ?? "Your default value";

    return BookingItemResponse;
}

在任何情况下,您都不必担心代码中if语句的性能 (除非该代码被称为数百万次)

答案 1 :(得分:1)

我的建议是不要检查null。相反,在没有bookingNamepassengerEmail的情况下为此方法创建重载。这将使您的代码更灵活,更清晰。

至于我,在你的情况下,无论如何你都不会有任何表现上升。

答案 2 :(得分:0)

您将始终需要if语句,任何调用者仍然可以将null传递给您的方法。仅在省略参数时才使用默认值。

BookingItem[] items = null; // From somewhere...
new BookingItemResponse(items, Currency: null);

对于BookingItemResponse参数,这仍然会将空值传递给Currency,而bookingNamepassengerEmail将被分配其默认值。