目前,我正在维护一个不是由我开发的程序,在我们的代码的很多部分中我们有类似的东西
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。
哪一项性能更优化?
答案 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
。相反,在没有bookingName
和passengerEmail
的情况下为此方法创建重载。这将使您的代码更灵活,更清晰。
至于我,在你的情况下,无论如何你都不会有任何表现上升。
答案 2 :(得分:0)
您将始终需要if语句,任何调用者仍然可以将null传递给您的方法。仅在省略参数时才使用默认值。
BookingItem[] items = null; // From somewhere...
new BookingItemResponse(items, Currency: null);
对于BookingItemResponse
参数,这仍然会将空值传递给Currency
,而bookingName
和passengerEmail
将被分配其默认值。