2016-05-31 5 views
0

内の文字列をこぼした再帰呼び出しに思えるC#ゲッターセッターは、私はC#はLIST EndorseImage <strong>の</strong>リンク しかし、私のコードにコンマで、文字列プロパティを分割するEndorseImageLinkをプロパティを設定します使用することができますどのように一覧

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'プロパティのためにありますか?ほとんどの場合、 '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に依存する計算されたプロパティです。

2つのアプローチがあります。私は削除されますstring.Splitオーバーロードを使用しました両方のケースで

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

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

注:

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

それとも、単にオンデマンドで結果を計算することができます:あなたは、このにstringが設定されるたびに設定することができます空のエントリ - これを手動で行う必要はありません。

1

それはEndorseImagesLinkのゲッターにあなたが同じEndorseImagesLinkプロパティを返すので、ウィッヒは、何度も何度も同じゲッターを呼び出します、再帰呼び出しが発生します。このような 何かが正しいのようになります。

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

あなたの説明をありがとう。 –

関連する問題

 関連する問題