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<int>
(它们是等效的))。你可以用同样的方式对待它们
@Flydog57 出于某种原因 C# 忽略 ``` ?? "" `` 并且仍然在字符串上返回 null以上是关于C#,.NET,在将请求转换为字符串的函数中检查 null的主要内容,如果未能解决你的问题,请参考以下文章