在类内部实现验证规则
本文关键字:验证 规则 实现 内部 | 更新日期: 2023-09-27 18:27:19
我有像这个一样的class
public class EmployeeInfo
{
public string EmployeeName { get; set; }
public string PhoneNumber { get; set; }
public string Office { get; set; }
public string Department { get; set; }
}
我创建了一个以SPListItemCollection
为参数并返回EmployeeInfo
类的对象列表的方法。SPList
内部没有限制,当您创建新项时,您可以将一些字段留空,所以我使用reflection
来确定字段是否为null
,然后在填充EmployeeInfo
对象时插入空字符串以避免异常。
public List<Models.EmployeeInfo> GetEmployeeInfo(SPListItemCollection splic)
{
var listEmployeeInfo = new List<Models.EmployeeInfo>();
var propertyNames = new List<string>() { "EmployeeName",
"Department",
"Office",
"PhoneNumber"};
foreach (SPListItem item in splic)
{
var employeeInfo = new Models.EmployeeInfo();
foreach (var propertyName in propertyNames)
{
string newData = "";
if (item[propertyName] != null)
{
newData = item[propertyName].ToString();
}
employeeInfo.GetType().GetProperty(propertyName).SetValue(employeeInfo, newData, null);
}
listEmployeeInfo.Add(employeeInfo);
}
return listEmployeeInfo;
}
后来我了解到在嵌套循环中使用reflection
是不好的做法,所以我正在寻找不同的方法。我有没有可能在EmpployeeInfo
类中制定一些预验证规则,比如Validation方法,或者在类属性中编写一些代码,而不是在GetEmployeeInfo
方法中编写一些,只是通过调用该方法来填充属性?非常感谢。
只写c'tor:
public EmployeeInfo(string employeeName ,string phoneNumber, string office, string department)
{
EmployeeName = employeeName;
PhoneNumber = phoneNumber;
Office = office;
Department = department;
}
你可以这样称呼它:
var employeeInfo = new Models.EmployeeInfo(item["EmployeeName"] ?? "", item["PhoneNumber"] ?? "", item["Office"] ?? "", item["Department"] ?? "");
无论如何,您应该避免将字段声明为公共字段,因为这会破坏封装。
您可以在单独的getter和setter 中添加逻辑
public class EmployeeInfo
{
private string employeeName;
public string EmployeeName
{
get
{
return employeeName ?? ""; //Returns the content, or an empty string if it is null
}
set
{
employeeName = value;
}
}
}
通过这种方式,在访问属性时可以获得一个标准值(比如""
),而不是null。