我有一个CSV文件,我需要准备并验证每一行中的每个元素,并创建一个具有有效数据的类的集合.
即CSV文件看起来像:
EmpID,FirstName,LastName,Salary
1,James,Help,100000
2,Jane,Scott,1000
3,Mary,Fraze,10000
Run Code Online (Sandbox Code Playgroud)
类看起来像:
public class Employees
{
public int EmpID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Salary { get; set; }
public string ErrorReason { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
以下是每个字段所需的验证:
的EmpID:
FirstName(LastName的相同验证):
薪水:
要做到这一点,这是我的方法:
所以,我的问题是,这是正确的方法,还是有任何其他更好/更清晰的方法来验证类属性.
谢谢
我会考虑使用C#DataAnnotations命名空间.我经常将它们用于MVC模型,它们非常有用.
我认为这有用的原因是你可以尝试在try/catch块中创建一个新的Employees对象并捕获ValidationExceptions,例如:
List<Employees> empList = new List<Employees>();
foreach (var row in csvRows){
try {
//Parse the row here and create the object. don't do any validation here
var employee = CreateEmployeeFromRow(row);
empList.Add(employee);
}
catch (ValidationException ve){
//do whatever
}
}
Run Code Online (Sandbox Code Playgroud)
你的课看起来像:
using System.ComponentModel.DataAnnotations;
public class Employees
{
[Required, RangeAttribute(0, 99)]
public int EmpID { get; set; }
[Required, Length(30), RegularExpression("/^[A-Za-z]+$/")]
public string FirstName { get; set; }
[Required, Length(30), RegularExpression("/^[A-Za-z]+$/")]
public string LastName { get; set; }
[Required]
public decimal Salary { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
至于避免重复的员工ID,我会在插入数据库之前检查一下.这并不会使Employees对象无效(或CSV中的行无效,因为它是正确的格式).
| 归档时间: |
|
| 查看次数: |
13614 次 |
| 最近记录: |