我正在檢查 C# 中遵循的兩個條件:
if (result.Data.Count > 0)
{
if(result.Data[0].AdditionalData != null)
{
// To Do
}
}
我的困惑是有沒有更好的方法在單個 if 條件下檢查這些?
我正在嘗試使用 Null-Condition 運算子,但沒有成功。MSDN 中的空條件運算子
uj5u.com熱心網友回復:
就像@Hans Killian 也寫的一樣,嘗試使用已經存在的擴展IEnumerables
在你的情況下,我認為.ElementAtOrDefault(0)(或者如果你總是想使用索引 0 只是使用.FirstOrDefault())是最適合你的。
if (result?.Data != null && result.Data.Any())
{
/// Expecting 'AdditionalData' is `string`
if (!string.IsNullOrEmpty(result.Data.ElementAtOrDefault(0)?.AdditionalData))
{
Console.WriteLine("Null check working...");
}
else
{
Console.WriteLine("AdditionalData is null or empty!");
}
}
else
{
Console.WriteLine("No data!");
}
完整的作業示例可以在這里找到
uj5u.com熱心網友回復:
一個襯墊使用System.Linq.
if (result.Data.FirstOrDefault()?.AdditionalDate != null)
{
}
uj5u.com熱心網友回復:
我認為擁有干凈和良好代碼的最佳方法是使用 FluentValidation。請注意以下代碼片段:
public class RegisterValidator : AbstractValidator<RegisterDTO>
{
public RegisterValidator()
{
RuleFor(a => a.PhoneNumber).NotNull().WithMessage(Utility.GetEnumTitlePersian(enmErrorMessage.InValidMobileNumber));
RuleFor(a => a.PhoneNumber).NotEmpty().WithMessage(Utility.GetEnumTitlePersian(enmErrorMessage.InValidMobileNumber));
RuleFor(a => a.PhoneNumber).MinimumLength(11).WithMessage(Utility.GetEnumTitlePersian(enmErrorMessage.InValidMobileNumber));
RuleFor(a => a.PhoneNumber).MaximumLength(11).WithMessage(Utility.GetEnumTitlePersian(enmErrorMessage.InValidMobileNumber));
}
}
上面的代碼是驗證模型以檢查 null、empty 等的示例,此代碼必須檢查業務邏輯中的驗證:
var validator = new RegisterValidator();
var validatorResult = await validator.ValidateAsync(register);
if (!validatorResult.IsValid)
return BadRequest("", validatorResult.Errors[0].ToString());
它使用起來非常簡單,而且非常干凈。你甚至可以通過錯誤串列進行多次檢查并得到結果這個鏈接是FluentValidation的站點地址
uj5u.com熱心網友回復:
空條件可以與 一起作業Any,并短路下一個檢查
if (result?.Data?.Any() && result.Data[0]?.AdditionalData != null)
{
// to do
}
每個步驟的解釋
result?
結果不為空嗎?
Data?
如果是這樣,資料不為空嗎?
Any()
如果是這樣,資料是否有任何專案?
Data[0]?
如果是這樣,第一項不為空嗎?(我在這里使用 index 的原因是因為你可能想檢查第 n 個專案,所以FirstOrDefault可能限制性太強)
AdditionalData != null
如果是這樣,附加資料不為空嗎?
當然,如果這些檢查中的任何一個是不必要的或多余的,您可以從鏈中洗掉特定檢查(?在空條件的情況下洗掉)。這里的檢查都清楚地排列在一行中,因此修改邏輯鏈很簡單。
uj5u.com熱心網友回復:
您忘記檢查該值是否為空。空或空是差異值。
uj5u.com熱心網友回復:
您可以在 IEnumerable 上創建擴展方法并使用它
public static bool HasValue<T>(this IEnumerable<T> source, int index)
{
if (source == null)
return false;
return source.Count() > index && source.ElementAt(index) != null;
}
// usage
if(result.Data.HasValue(0))
{
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/388382.html
