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

C# 检查参数值是否为null,然后初始化对象。这是个好主意吗?,c#,C#,目前,我正在维护一个不是我自己开发的程序,在我们代码的很多部分,我们都有类似的东西 public BookingItemResponse(BookingItem[] BookingItems,Currency="USD", string bookingName=null, string passengerEmail =null) { Request.BookingItem[]=BookingItems; if(bookingName!=null) Request.BookingN

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

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
}
是否需要检查参数是否为null,然后初始化我的目标对象

如果我只是删除ifs,然后写下下面这样的内容呢

Request.BookingName=bookingName;
请注意,请求对象将在最后序列化。响应将被反序列化并作为BookingItemResponse返回

哪一个性能更优化

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语句的性能
(除非该代码被调用数百万次)

我的建议是不要检查
null
s。相反-在不使用
bookingName
PassengerMail
的情况下为此方法创建重载。这将使您的代码更加灵活和清晰


至于我,在你的情况下,你在任何情况下都不会得到任何绩效提升

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

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

对于
Currency
参数,
BookingItemResponse
仍将传递空值,而
bookingName
passengerEmail
将被分配其默认值。

为什么要删除ifs?!?lol:D问得好,但这会使我们的程序可读性降低。我还想知道在哪个解决方案中可以获得最高性能如果BookingName为null,Request.BookingName的值是多少?默认值是什么?默认值是nullcheck@Behzad的注释。默认值为null。是的,该函数将通过我们的程序多次调用,这不是唯一的函数。因此,您建议我删除ifs,对吗?@Behzad如果Request.BookingName的有效值为null(默认值为null),则删除ifs。无需额外设置check@GeorgeVovos正如我所说,请求对象将在最后序列化,因此空值将是空xml标记。没错,这是一个好主意,但是如果你这样做了,不要在新函数上重复代码,只需调用原始函数就可以得到正确的参数。