[英]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.