C#,.NET,在将请求转换为字符串的函数中检查 null

Posted

技术标签:

【中文标题】C#,.NET,在将请求转换为字符串的函数中检查 null【英文标题】:C#, .NET, Check for null in function which converts request to string 【发布时间】:2021-02-28 06:05:50 【问题描述】:

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

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,它会使应用程序崩溃并返回:

$exception "对象引用未设置为 对象。” System.NullReferenceException

【问题讨论】:

嗯,这取决于。你在哪里得到意想不到的空值。发生这种情况时你想做什么? @Flydog57 我要加入买方,但买方不是字符串。它正在EmailBuyer public EmailBuyer Buyer get; set; 中收集更多实体 【参考方案1】:

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

Payer = data.DataPaymentMethod.Payer

改写成这样

Payer = data?.DataPaymentMethod?.Payer

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

【讨论】:

谢谢!这就是我需要的【参考方案2】:

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

这个例子的意思是如果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 上还有更多内容

【讨论】:

谢谢!有没有办法用 int 做到这一点? int 不能为空。可以为 null 的 int(声明为 int?Nullable&lt;int&gt;(它们是等效的))。你可以用同样的方式对待它们 @Flydog57 出于某种原因 C# 忽略 ``` ?? "" `` 并且仍然在字符串上返回 null

以上是关于C#,.NET,在将请求转换为字符串的函数中检查 null的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中检查对象是不是为数字

将 SQL 命令从 vb .net 转换为 C#

C# 动态转换超过了不同参数的类型不匹配错误

.NET 5.0 中的 xslt PDF 转换:特殊字符问题

在将旧版 C++ 组件之一转换为 C# 时需要建议

为啥我的画布在将 html 转换为 DOM 调用时会自行缩放? [复制]