2016-05-31 49 views
0

灑串如何使用C#獲取設置屬性字符串屬性,EndorseImageLink,用逗號分割成LIST EndorseImage 小號鏈接 但我的代碼似乎遞歸調用C#的getter setter方法以列表

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

提示:使用底層變量_endorseImagesLink。 – Karolis

+2

目前還不清楚你想要做什麼。當然,這將在'string'屬性的setter中,而不是列表中?大多數人會認爲,如果你爲List List設置一個值,那麼這就是設置 - 你完全忽略了'value'。 –

+0

@CharlesMager謝謝,我忽視了'價值',所以我讓自己變得模糊 –

回答

0

也許我誤解了,但是你想要那樣的東西嗎?

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

謝謝你,我忘記了一些基本知識,將值分配給屬性,謝謝你的代碼 –

0

你需要一個私有變量的屬性訪問

​​

會發生什麼事是你嘗試設置該屬性在自己的setter。這然後啓動遞歸循環。

0

看起來你有點混亂。我不認爲你想要使用二傳手EndorseImagesLink - 這實際上是一個計算屬性,取決於string

有兩種方法。你可以這樣設置的string設置每次:

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>(); 

或者你可以只計算需求的結果:

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

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

注意,在這兩種情況下,我用了string.Split超載,將刪除空條目 - 您不需要手動執行此操作。

1

它會導致遞歸調用,因爲在EndorseImagesLink的吸氣返回相同EndorseImagesLink財產,將至極一再調用相同的getter。 這樣的事情是正確的:

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

感謝您的解釋。我必須注意 –