2009-07-23 4 views
0

Ich habe eine Klasse Referrals. Wenn Sie ein Objekt in der Klasse erstellen, überprüft es, ob die Eingabezeichenfolgen eindeutig sind (und daher keine doppelten Objekte zulassen). Aber wenn ich finde, dass die Eingabezeichenfolge str1 gleich der eines zuvor erstellten Objekts ist, anstatt ein neues Objekt zu erstellen oder einfach nur false zurückzugeben, möchte ich eine Eigenschaft des bereits erstellten Objekts ändern. Aber ich kann nicht herausfinden, wie das geht, da die Methode den Namen des Objekts nicht kennt. Aber ich weiß etwas Einzigartiges darüber! Ich habe das Gefühl, dass dies genug sein muss irgendwie nennen Sie es, und tun, was ich tun muss.C# Call-Objekt von einzigartigen Eigenschaft

Irgendwelche Ideen?
DANKE! Hier

ist die Klasse:

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

Ich bin ein bisschen verwirrt über das, was Sie versuchen, wenn es um Ihre Frage und Ihren Code geht. Zum einen ist dies keine Methode, es ist ein Konstruktor, daher ist die Rückgabe von false keine Option und das Erstellen eines neuen Verweises ist keine Option. Auch Ihre For-Schleife erscheint, führen Sie die gleichen Prüfungen jedes Mal durch die Schleife ohne Änderungen durch. Sollte Ihre Sekunde, wenn sein: if (Keywords.ContainsKey (MyKeyword)) ? – drs9222

Antwort

0

Warum nicht eine Liste der Referral erstellen Objekte außerhalb des Referral Objekt selbst? Auf diese Weise können Sie in der Liste prüfen, ob das Objekt mit Ihren Kriterien bereits existiert. Wenn ja, aktualisieren Sie dieses Objekt. Wenn nicht, erstellen Sie eine neue und fügen Sie sie zur Liste hinzu.

Entweder das oder eine statische Liste verwenden, die auch außerhalb der Referrals-Klasse deklariert wird.

Ich bin mir nicht 100% sicher, wohin Sie damit gehen, also wird hoffentlich einer dieser Ansätze für Sie arbeiten.

+0

Warum außerhalb der Referral-Klasse? Wenn es im Verweis-Konstruktor nur verwendet wird, gibt es keinen Grund, es außerhalb der Klasse verfügbar zu machen. –

+0

es klingt für mich, als ob sie versuchen, eine Sammlung von Objekten zu verwalten, und neue Objekte hinzufügen möchten, wenn eines nicht existiert, und ein vorhandenes aktualisieren, wenn eines existiert. Eine Sammlung dieser Objekte scheint der beste Weg, dies zu erreichen. –

0

Versuchen Sie, die Dictionary.TryGetValue Methode zu verwenden?

Ich habe nicht ganz verstanden, was Sie mit Ihrem Code zu tun versuchen, und es ist ein bisschen spät.

0

Sie müssen eine Controller-Klasse erstellen, die eine Sammlung von Referenzobjekten verwaltet, um die Voraussetzung für die Überprüfung und Aktualisierung des Objekts zu erhalten.

Etwas wie:

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; 
    } 
} 

Und ich würde Ihre Referral-Klasse als eine Variable in Kardinalität nicht nehmen ändern. Dies sollte privat behandelt werden, um das Objekt:

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++; 
    } 

}