c# - 条件优化/可读性
问题描述
我目前有一个控制器正在读取文本文件,检查数据,然后输出到视图。我想知道是否有更好的方法来完成我的检查?
这是我阅读文件并进行检查的地方。如您所见,我的支票很长,并且在我添加了 3 或 4 个 if else 条件之后,如果还没有,它可能最终变得不可读。任何建议,将不胜感激!
using (var sr = new StreamReader(newFullPath))
{
while ((strbuild = sr.ReadLine()) != null)
{
var strArray = strbuild.Split('|');
string INum = string.Empty,
IDate = string.Empty,
site = string.Empty,
PG = string.Empty,
errors = string.Empty;
if (strArray[0] == "1")
{
FileCheck(strArray, out INum, out IDate, out site, out PG, out errors);
var model = new UploadFileValidation
{
InvoiceNumber = INum,
Errors = errors
};
validateOutput.Add(model);
}
}
return View(validateOutput);
}
支票如下
private void FileCheck(string[] strArray, out string INum, out string IDate, out string site, out string PG, out string errors)
{
INum = strArray[1];
IDate = strArray[2];
errors = "";
site = strArray[10];
var check = strArray.ElementAtOrDefault(11) != null;
if (check)
PG = strArray[11];
else
PG = "";
string[] errorformats = { $"Unsupported date format of {IDate}.", "Site is missing", "Invalid Pay group" };
string[] format = { "MM/dd/yyyy", "M/dd/yyyy", "MM/d/yyyy", "M/d/yyyy" };
DateTime dateTime;
if (!DateTime.TryParseExact(IDate, format, CultureInfo.InvariantCulture,
DateTimeStyles.None, out dateTime))
errors = $"{errorformats[0]}";
if (PG == "" && errors != "")
errors = $"{errors}<br>{errorformats[2]}";
else if (PG == "" && errors == "")
errors = $"{errors}<br>{errorformats[1]}";
if (site == "" && errors != "")
errors = $"{errors}<br>{errorformats[1]}";
else if (site == "" && errors == "")
errors = $"{errorformats[1]}";
}
解决方案
您可以使用string.Join
以下方式加入多个错误<br>
:
private void FileCheck(string[] strArray, out string invoiceNum, out string date, out string site, out string pg, out string errorMessage)
{
var errors = new List<string>();
invoiceNum = strArray[1];
date = strArray[2];
site = strArray[10];
pg = strArray.ElementAtOrDefault(11) ?? string.Empty;
var validDateFormats = new[] { "MM/dd/yyyy", "M/dd/yyyy", "MM/d/yyyy", "M/d/yyyy" };
if (!DateTime.TryParseExact(date, validDateFormats, CultureInfo.InvariantCulture, DateTimeStyles.None, out _))
errors.Add($"Unsupported date format of {date}.");
if (pg == "")
errors.Add("Invalid Pay group");
if (site == "")
errors.Add("Site is missing");
errorMessage = string.Join("<br>", errors);
}
如果您不关心 的结果,out
则可以使用out _
忽略它。您甚至可以忽略其中的多个,例如:
FileCheck(strArray, out var invoiceNum, out _, out _, out _, out var errors);
推荐阅读
- android - 构建发布 APK 时因改造导致的问题
- c# - C#如何循环json2csharp生成的类列表
- matlab - 如何让matlab显示十进制数?
- c# - 在asp.net framework 4.0中,如何在没有nuget的情况下实现Stripe PaymentGateway?
- mysql - SQL 更新来自 select 的记录列表
- android - 如何在 RecyclerView 之间添加 Facebook Audience Network 原生广告
- python - 使用 Python 制作包含 100 多个绘图的 PDF 报告的最佳方法是什么?
- android - 在android中,如何在cardview左上角和右上角圆角设置imageview?
- javascript - 如果月份无效,如何从 DOB 计算年龄?
- javascript - 重试失败的 API 调用到 Angular 中的另一个源