2009-07-23 5 views
0

私は参照クラスを持っています。クラス内にオブジェクトを作成すると、入力文字列が一意であることがチェックされます(したがって、重複するオブジェクトは決して許可されません)。しかし、入力文字列str1が以前に作成されたオブジェクトのものと等しいとわかった場合、新しいオブジェクトを作成するかfalseを返すのではなく、すでに作成されたオブジェクトのプロパティを変更したい。しかし、メソッドはオブジェクトの名前を知る方法がないので、私はこれを行う方法を把握することはできません。しかし私はそれについて独特の何かを知っている!私はこれが十二分ににする必要があるように感じるそれを呼び出すと、私は何をする必要があります。C#固有のプロパティでオブジェクトを呼び出す

アイデア?
ありがとうございました!ここで

クラスです:

public class Referral 
{ 
    public class Referral 
    { 
     public string URL; 
     public Dictionary<string, int> Keywords = new Dictionary<string, int>(); 

     private static Dictionary<string, string> URLs = new Dictionary<string, string>(); 
     private int HowManyURLs; 
     private bool UniqueURL; 
     private bool UniqueKeyword; 

     public Referral(string MyURL, string MyKeyword, int MyOccurrences) //Constructor 
     { 
    if (HowManyURLs == 0) 
    { 
     URL = MyURL; 
     Keywords.Add(MyKeyword, MyOccurrences); 
     URLs.Add(MyURL, MyKeyword); 
     HowManyURLs++; 
    } 

    else 
    { 
     // RESET FLAGS 
     UniqueURL = true; 
     UniqueKeyword = true; 

     for (int i = 0; i < HowManyURLs; i++) 
     { 
     if (URLs.ContainsKey(MyURL)) 
     { 
      // TRIP URL FLAG 
      UniqueURL = false; 

      // NOW CHECK KEYWORDS OF URL << THIS IS WHAT I CAN'T DO! 
      if (URLs.ContainsKey(MyKeyword)) 
      { 
      // TRIP KEYWORD FLAG 
      UniqueKeyword = false; 

      // ADD TO OCCURRENCES 
    //  Referral[MyURL].Occurrences += MyOccurrences; 
      } 
     } 
     } 

    // IF BOTH FLAGS TRUE 
    if (UniqueURL == true && UniqueKeyword == true) 
    { 
     URL = MyURL; 
     Keywords.Add(MyKeyword, MyOccurrences); 
     URLs.Add(MyURL, MyKeyword); 
     HowManyURLs++; 
    } 

    } 

     } 
    } 
+0

私はあなたの質問とあなたのコードの両方に関して何をしようとしているのか少し混乱しています。 これはコンストラクタではありませんが、falseを返すことはオプションではなく、新しいReferralを作成しないことはオプションではありません。 また、あなたのforループが表示されても、ループを繰り返すたびに同じチェックが行われます。 2番目の場合: if(Keywords.ContainsKey(MyKeyword)) ? – drs9222

答えて

0

なぜあなたは紹介のリストを作成しない紹介オブジェクト自体の外オブジェクト?そうすれば、あなたの基準を持つオブジェクトがすでに存在するかどうかを確認することができます。その場合は、そのオブジェクトを更新します。そうでない場合は、新しいものを作成してリストに追加します。

また、参照クラスの外部で宣言された静的リストを使用してください。

私は100%あなたがこれと一緒に行くつもりはないので、うまくいけばそのアプローチの1つがあなたのために働くでしょう。

+0

Referralクラス以外の理由それが使用されている唯一の場所がReferralコンストラクタにある場合、それをクラス外に公開する理由はありません。 –

+0

オブジェクトのコレクションを維持しようとしていて、存在しないときに新しいオブジェクトを追加し、既存のものが存在するときに新しいオブジェクトを更新したいと思うように聞こえます。これらのオブジェクトのコレクションは、これを達成する最善の方法のようです。 –

0

Dictionary.TryGetValueの方法をお試しください。

あなたのコードで何をしようとしているのかよく分かりませんでしたが、少し遅れました。

0

オブジェクトの前提条件のチェックと更新を実現するために、紹介オブジェクトのコレクションを維持するコントローラクラスを作成する必要があります。

ような何か:

public class Referrals 
{ 
    private List<Referral> refs; 

    public class Referrals() 
    { 
     this.refs = new List<Referral>(); 
    } 

    public Referral Add(string MyURL, string MyKeyword) 
    { 
     var ref = this.refs.Find(delegate(Referral r) { return r.URL == MyURL; }); 
     if (ref != null) 
     { 
      if (ref.Keyword == MyKeyword) 
      { 
       ref.IncrementOccurrences(); 
      } 
     } 
     else 
     { 
      ref = new Referral(MyURL, MyKeyword); 
      this.refs.Add(ref); 
     } 
     return ref; 
    } 
} 

そして私は、変数として出現して取らないためにあなたの紹介のクラスを変更します。これは、オブジェクトに個人的に処理する必要があります。

public class Referral 
{ 
    private string url; 
    private string keyword; 
    private int occurrences; 

    public Referral(string MyURL, string MyKeyword) 
    { 
     this.url = MyURL; 
     this.keyword = MyKeyword; 
     this.occurrences = 1; 
    } 

    public int Occurrences { get { return this.occurrences; } } 
    public string URL { get { return this.url; } } 
    public string Keyword { get { return this.keyword; } } 

    public void IncrementOccurrencies() 
    { 
     this.occurrences++; 
    } 

} 
関連する問題