我有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
类中制作一些预验证规则,比如验证方法或在类属性内部编写一些代码,而不是在GetEmployeeInfo
方法内部通过调用该方法来填充属性?
谢谢。
答案 0 :(得分:1)
只写c&#tor; 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"] ?? "");
无论如何,你应该避免将字段声明为公共字段,因为它会破坏封装。
答案 1 :(得分:0)
你可以在单独的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。