C#、.NET、检查将请求转换为字符串的函数中的空值

C#, .NET, Check for null in function which converts request to string

我有一个接受请求并将其转换为字符串的函数:

private string CreateEmailData(Models.V2.RequestPaymentModel data)
{
   var emailRequest = new ApiRequest<RequestPaymentEmailModel>
   {
      Id = id,
      DateUtc = DateTime.UtcNow,
      Data = new Utils.EmailRequest.RequestPaymentEmailModel
      {
         LanguageCode = data.LanguageCode,
         DeviceID = data.DeviceId,
         CoreSystem = data.CoreSystem,
         Transaction = new Utils.EmailRequest.TransactionEmail()
         {
            Country = data.CountryCode,
            TransactionType = data.Transaction.Type,
            Amount = data.Transaction.Amount,
            Currency = data.Transaction.Currency,
            Authorization = "",
            Type = data.Transaction.Type,
            Description = data.Transaction.Description,
            PaymentNetwork = data.PaymentNetwork,
            ReferenceId = data.Transaction.ReferenceID,
            CartValue = data.Transaction.CartValue,
            PaymentFrequency = data.Transaction.PaymentFrequency,
            InvoiceNumber = data.Transaction.InvoiceNumber,
            GoodsType = data.Transaction.GoodsType,
            ProductID = data.Transaction.ProductId
         },
         CreditCard = new Utils.EmailRequest.EmailCreditCard()
         {
            Number = data.DataPaymentMethod.CreditCard.Number,
            Month = data.DataPaymentMethod.CreditCard.Month,
            Year = data.DataPaymentMethod.CreditCard.Year,
            FirstName = data.DataPaymentMethod.CreditCard.FirstName,
            LastName = data.DataPaymentMethod.CreditCard.LastName
         },
         PaymentMethod = data.PaymentMethod,
         DataSecurity = data.DataSecurity,
         ExtraParameter = data.DataPaymentMethod.ExtraParameter,
         Buyer = data.DataPaymentMethod.Buyer,
         Payer = data.DataPaymentMethod.Payer,
      }
   }.ToJson();

   return emailRequest;
}

但有时 Payer 等请求中的某些值可能为空。 如何检查此函数中的空值? 现在,如果值为 null,它会使应用程序崩溃并且 returns:

$exception {"Object reference not set to an instance of an object."} System.NullReferenceException

您可以使用将空值转换为字符串

这个例子意味着如果 Transaction 为 null,则使用 empty string 代替

TransactionType = data.Transaction?.Type ?? ""

这个例子意味着如果 CountryCode 为空,则使用 空字符串 代替

Country = data.CountryCode ?? ""

语法本身基本上是一个内联 if 语句,https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/conditional-operator

中还有更多内容

您需要包括空值检查。你的问题不是它不能转换成字符串。那是你在引用空对象。您需要做的是将您的代码替换为如下所示的行

Payer = data.DataPaymentMethod.Payer

重写成这样

Payer = data?.DataPaymentMethod?.Payer

这样,如果“数据”为空,则付款人为空。如果 data.DataPaymentMethod 为空,则付款人为空。最后,如果 data.DataPaymentMethod.Payer 为空,则 Payer 为空。如果您的 C# 版本支持此语法,那么这就是我要使用的。否则你要么需要编写一个丑陋的 turnary,要么创建一个方法来处理 null 检查。