我有一个角度控制器,可以发布Web API方法。我试图在ienumerable上添加null安全性,但是当我这样做时,导致ienumerable总是为空。
角度呼叫
$http.post(customer/DoSomething, {names: ["chris", "joe"]})
方法
string DoSomething(Customer customer){...}
模型
// populates IEnumerable
public class Customer
{
public IEnumerable<string> Names {get; set;}
}
// what I want to do but IEnumerable is always empty
public class Customer
{
private IEnumerable<string> _names;
public IEnumerable<string> Names
{
get
{
return _names ?? new List<string>();
}
set
{
_names = value;
}
}
}
答案 0 :(得分:7)
您可以添加一个构建器来初始化您的集合。
// populates IEnumerable
public class Customer
{
public Customer()
{
this.Names = new List<string>();
}
public IEnumerable<string> Names {get; set;}
}
这将确保您的Names
集合不为空。
修改强>
现在已经使用C#自动属性
进行了简化// populates IEnumerable
public class Customer
{
public IEnumerable<string> Names {get; set;} = new List<string>();
}
答案 1 :(得分:1)
Sameer的回答是最好的做法。
只是指出初始代码的问题,它始终返回List的新实例,因为您从未设置字段值。
public IEnumerable<string> Names
{
get
{
if(_names == null)
_names = new List<string>();
return _names;
}
set
{
_names = value;
}
}