2016-05-31 9 views
0

Wie kann ich C# Eigenschaften erhalten gesetzt String-Eigenschaft zu spalten, EndorseImageLink, mit Komma in LIST EndorseImage s Link- aber mein Code scheinen nennenC# Getter Setter verschüttet Zeichenfolge in List

public string EndorseImageLink { get; set; } 
    public List<string> EndorseImagesLink 
      { 
       get { return this.EndorseImagesLink; } 
       set 
       { 

        foreach (var endorseImageUrl in this.EndorseImageLink.Split(',')) 
        { 
         if (endorseImageUrl.IsNotNullOrEmpty()) 
         { 
          this.EndorseImagesLink.Add(endorseImageUrl); 
         } 
        } 
       } 
      } 
+1

Hinweis: zugrunde liegenden Variable _endorseImagesLink verwenden. – Karolis

+2

Es ist nicht klar, was Sie versuchen zu tun. Sicher würde dies in der Setter für die Eigenschaft "String", nicht die Liste sein? Die meisten würden erwarten, dass, wenn Sie die "Liste" mit einem Wert festlegen, dann wird das festgelegt - Sie ignorieren den "Wert" vollständig. –

+0

@CharlesMager danke, ignorierte ich den "Wert", so machte ich mich verwirrt –

Antwort

0

Vielleicht habe ich missverstanden, aber willst du so etwas?

public string EndorseImageLink 
    { 
     set 
     { 
      EndorseImagesLink.Clear(); 
      foreach (var endorseImageUrl in value.Split(',').Where(endorseImageUrl => !string.IsNullOrEmpty(endorseImageUrl))) 
      { 
       EndorseImagesLink.Add(endorseImageUrl); 
      } 
     } 
    } 

    public List<string> EndorseImagesLink 
    { 
     get { return _endorseImagesLink ?? (_endorseImagesLink = new List<string>()); } 
     private set { _endorseImagesLink = value; } 
    } 
+0

Danke, habe ich einige Grundlagen vergessen, um Wert auf die Eigenschaft, danke Ihr Code-Schnipsel –

0

Sie rekursiven benötigt eine private Variable, dass die Eigenschaft

private List<string> _endorseImagesLink = new List<string>(); 
public List<string> EndorseImagesLink 
     { 
      get { return _endorseImagesLink ; } 
      set 
      { 
       _endorseImagesLink.Clear(); 
       foreach (var endorseImageUrl in this.EndorseImageLink.Split(',')) 
       { 
        if (endorseImageUrl.IsNotNullOrEmpty()) 
        { 
         _endorseImagesLink .Add(endorseImageUrl); 
        } 
       } 
      } 
     } 

Was greift passiert ist, dass Sie die Eigenschaft in seinem eigenen setter zu setzen versuchen. Dies startet dann die rekursive Schleife.

0

Es sieht so aus, als ob Sie in einem Durcheinander sind. Ich glaube nicht, dass Sie den Setter für EndorseImagesLink überhaupt verwenden möchten - das ist eine berechnete Eigenschaft, die von der string abhängt.

Es gibt zwei Ansätze. Man könnte dies jedes Mal eingestellt, dass die string gesetzt:

private string _linksDelimited; 

public string LinksDelimited 
{ 
    get { return _linksDelimited; } 
    set 
    { 
     _linksDelimited = value; 
     Links = value.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries); 
    } 
} 

public IEnumerable<string> Links { get; private set; } = Enumerable.Empty<string>(); 

Oder Sie könnten nur das Ergebnis auf Nachfrage berechnen:

public string LinksDelimited { get; set; } = string.Empty; 

public IEnumerable<string> Links 
    => LinksDelimited.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries); 

Hinweis in beiden Fällen habe ich die string.Split Überlastung verwendet, die entfernen wird leere Einträge - Sie müssen dies nicht manuell tun.

1

Es verursacht rekursive Aufrufe, weil in dem Getter von EndorseImagesLink Sie die gleiche EndorseImagesLink Eigenschaft zurückkehren, wich die gleiche Getter immer wieder aufrufen. So etwas wäre richtig:

private List<string> endorseImagesLink; 
public List<sting> EndorseImagesLink 
{ 
    get { return this.endorseImagesLink; } 
    set { this.endorseImagesLink = value; } 
} 
+0

Vielen Dank für Ihre Erklärung.Ich muss notiert werden –