繁体   English   中英

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。 如何在此函数中检查 null 值? 现在,如果值为 null,它会使应用程序崩溃并返回:

$exception {"未将对象引用设置为对象的实例。"} System.NullReferenceException

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

此示例表示如果Transaction为 null,则使用空字符串代替

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

此示例表示如果CountryCode为 null,则使用空字符串代替

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 为 null,则 Payer 为 null。 最后,如果 data.DataPaymentMethod.Payer 为 null,则 Payer 为 null。 如果您的 C# 版本支持这种语法,那么这就是我要使用的。 否则,您将需要编写一个丑陋的 Turnary 或创建一个方法来处理空检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM