/ / Wie man mit Eigenschaften in c # arbeitet? - c #

Wie man mit Eigenschaften in c # arbeitet? - c #

Ich habe ein klasse:

public class ViewModel
{
public string Name { set; get; }

public List<SimpleViewModel> Parameters
{
set
{
NotDeletedParameters = value.Where(t => !t.Deleted).ToList();
parameters = value;
}
get
{
return parameters;
}
}

private List<SimpleViewModel> parameters;

public ViewModel()
{
Parameters = new List<SimpleViewModel>();
}

public List<SimpleViewModel> NotDeletedParameters{ set; get; }
}

Es gibt 2 Parameterlisten in dieser Klasse: Parameters und NotDeletedParameters.

Wie kann ich einstellen? NotDeletedParameters = value.Where(t => !t.Deleted).ToList(); wenn ich ein gesetzt habe Parameters Eigentum.

Wenn ich diesen Code verwende, NotDeletedParameters hat immer noch 0 Elemente in der Liste. Irgendwelche Ideen?

Antworten:

2 für die Antwort № 1

NotDeletedParameters Liste wäre leer, weilSie setzen eine neue Eigenschaft List auf Parameter, die möglicherweise keine Parameter gelöscht hat. Wenn Sie die Listenelemente von Parameter bearbeiten, um gelöschte Parameter festzulegen, wird die Liste NotDeletedParameters nicht aktualisiert, da sie über eine eigene Kopie verfügt, die zugewiesen wurde Initialisierung der Parameter

Also, geben Sie stattdessen eine gefilterte Liste von Parametern in NotDeletedParameter zurück.

public class ViewModel
{
public string Name { set; get; }

public List<SimpleViewModel> Parameters
{
set
{
parameters = value;
}
get
{
return parameters;
}
}

private List<SimpleViewModel> parameters;

public ViewModel()
{
Parameters = new List<SimpleViewModel>();
}

public List<SimpleViewModel> NotDeletedParameters{
get {
return parameters .Where(t => !t.Deleted).ToList();
}
}
}

1 für die Antwort № 2

Sie können dieses Problem wahrscheinlich vermeiden, indem Sie NotDeletedParameters eine Get-Only-Eigenschaft erstellen, die die Liste im Handumdrehen erstellt:

public List<SimpleViewModel> NotDeletedParameters
{
get
{
return Parameters.Where(t => !t.Deleted).ToList();
}
}

(Ich würde auch empfehlen, eine IEnumerable-Anweisung anstelle einer Liste zurückzugeben und die return-Anweisung in Parameter.Where (t =>! T.Deleted) .ToList () zu ändern. AsReadOnly ()