C# C语言中的多个重载扩展方法#

C# C语言中的多个重载扩展方法#,c#,extension-methods,asp.net-core,C#,Extension Methods,Asp.net Core,具有具有重载扩展方法的问题设置数据- 我有两种扩展方法: public static void Fill(this SearchRequest request, ISearchViewModel vm) { request.blabla = vm.blabla; } public static void Fill(this IEnumerable<IViewModel> response, SearchResponse searchResponse) { // a lis

具有具有重载扩展方法的问题设置数据-

我有两种扩展方法:

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;
}
并按预期设置request.blabla。到目前为止还不错

然后我尝试:

ResultViewModel result = new ResultViewModel ();
result.searchResult.Fill(searchResponse);
.searchResult是IViewModel的IEnumerable,但在调用填充行后,result.searchResult为null。正在调用fill扩展方法,并且正在设置数据

如果您对可能出现的问题有任何想法,我们将不胜感激


(我使用的是VS 2015,这是一个vNext项目-不,这些不是真正的变量/类名)

response
结果的值。searchResult
,它不是该变量的别名。将值设置为
response
不会改变
result.searchResult
。无法编写通过引用而不是通过值传递其隐式参数的扩展方法。

IEnumerables是不可变的。也许您可以将类型更改为列表之类的可变类型?

您可以使用此代码而不是您的代码:

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");
    }
}
void Main()
{
var f=新的Foo();
f、 FillMyList();
}
公开课Foo
{
公共列表MyList{get;set;}
}
公共静态类扩展
{
公共静态void FillMyList(此Foo f)
{
f、 MyList=新列表();
f、 MyList.Add(“某些项目”);
}
}

我建议您使用已编译的真实代码。使用
Main
方法的一个简短且独立的示例是理想的。第二个扩展方法的参数具有重复响应。当你说某些东西不起作用时,把你用来分配给response(first param)的代码放进去,让我们看看。有了发布的伪代码,我们不能轻易地帮上忙。发布不起作用的实际代码。或者至少是类似的代码不起作用(MVCE)。@rejnev-我已经更新了问题,如果不清楚,很抱歉。@Azat-我已经更新了一点代码。结果是明确定义的。在调用Fill之前,我还尝试将result.searchResult设置为一个新的空列表。它是空的,谢谢。这是有道理的,而且奏效了。我想不管它是属性,它都会以与第一个方法相同的方式工作。谢谢你的建议,但是使用列表不起作用。它也是空的。上面Servy的回答解释了这一点。谢谢,我现在也有类似的东西。
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");
    }
}