Métodos de extensão sobrecarregados múltiplos em C #

votos
1

Ter uma definição de dados com um método de extensão sobrecarregados questão -

Eu tenho dois métodos de extensão:

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;
}

I primeira chamada:

 SearchRequest request = new SearchRequest ();
 request.Fill(criteria);

e request.blabla fica definido como esperado. Por enquanto, tudo bem.

Eu, então, tentar:

ResultViewModel result = new ResultViewModel ();
result.searchResult.Fill(searchResponse);

.searchResult é um IEnumerable de IViewModel, mas depois da linha de preenchimento é chamado, o result.searchResult é nulo. O método de extensão preenchimento definitivamente está sendo chamado, e é definitivamente a configuração de dados.

Algumas ideias sobre o que pode estar acontecendo de errado seria muito apreciada.

(Estou usando o VS 2015 e este é um projeto vNext - e não aqueles que não são variável real nomes / aula)

Publicado 25/11/2014 em 20:18
fonte usuário
Em outras línguas...                            


3 respostas

votos
3

responseé o valor de result.searchResult, não é um alias para que variável . Definir um valor para responsenão sofrer mutação result.searchResult. Não há maneira de escrever um método de extensão que passa seu parâmetro implícito por referência e não por valor.

Respondeu 25/11/2014 em 20:31
fonte usuário

votos
0

IEnumerables são imutáveis. Talvez você pode alterar o tipo de coisa que é mutável como uma lista?

Respondeu 25/11/2014 em 20:38
fonte usuário

votos
0

Você pode usar este código em vez de seu código:

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");
    }
}
Respondeu 25/11/2014 em 20:38
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more