使用重载扩展方法设置数据时遇到问题 -
我有两种扩展方法:
public static void Fill(this SearchRequest request, ISearchViewModel vm)
{
request.blabla = vm.blabla;
}
public static void Fill(this IEnumerable<IViewModel> response, SearchResponse searchResponse)
{
// a list is created here and assigned to response
List<IViewModel> someResults = new List<IViewModel>();
// do stuff with search response and someResults
response = someResults;
}
我先致电:
SearchRequest request = new SearchRequest ();
request.Fill(criteria);
和request.blabla按预期设置。到目前为止一切都很好。
然后我尝试:
ResultViewModel result = new ResultViewModel ();
result.searchResult.Fill(searchResponse);
.searchResult是IViewModel的IEnumerable,但在调用Fill行之后,result.searchResult为null。填充扩展方法肯定被调用,并且肯定是设置数据。
对于可能出现的问题的任何想法将不胜感激。
(我正在使用VS 2015,这是一个vNext项目 - 没有那些不是真正的变量/类名)
答案 0 :(得分:3)
response
是result.searchResult
的值,它不是变量的别名。将值设置为response
不会改变result.searchResult
。无法编写通过引用而不是按值传递其隐式参数的扩展方法。
答案 1 :(得分:0)
IEnumerables是不可变的。也许你可以将类型更改为像List一样可变的东西?
答案 2 :(得分:0)
您可以使用此代码代替您的代码:
void Main()
{
var f=new Foo();
f.FillMyList();
}
public class Foo
{
public List<string> MyList { get; set; }
}
public static class extensions
{
public static void FillMyList(this Foo f)
{
f.MyList=new List<string>();
f.MyList.Add("some item");
}
}