Frage

Ich habe eine Klassenüberweisung. Wenn Sie in der Klasse ein Objekt erstellen, überprüft es, dass die Eingangszeichenfolgen eindeutig sind (und daher niemals doppelte Objekte ermöglicht). Wenn ich jedoch finde, dass die Eingabe -String -String Str1 dem eines zuvor erstellten Objekts entspricht, anstatt ein neues Objekt zu erstellen oder 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 keine Möglichkeit hat, den Namen des Objekts zu kennen. Aber ich weiß etwas Einzigartiges! Ich habe das Gefühl, dass dies genug sein muss, um irgendwie Nennen Sie es und tun Sie, was ich tun muss.

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

    }

        }
    }
War es hilfreich?

Lösung

Warum erstellen Sie nicht eine Liste von Empfehlungsobjekten? außen des Überweisungsobjekts selbst? Auf diese Weise können Sie die Liste überprüfen, um festzustellen, ob das Objekt mit Ihren Kriterien bereits vorhanden ist. Wenn ja, aktualisieren Sie dieses Objekt. Wenn nicht, erstellen Sie eine neue und fügen Sie es der Liste hinzu.

Entweder das oder verwenden eine statische Liste, die ebenfalls außerhalb der Überweisungsklasse deklariert ist.

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

Andere Tipps

Versuchen Sie es mit dem Dictionary.trygetValue Methode?

Ich habe nicht ganz verstanden, was Sie mit Ihrem Code tun möchten, und es ist etwas spät.

Sie müssen eine Controller -Klasse erstellen, die eine Sammlung von Überweisungsobjekten beibehält, um die Voraussetzungsprüfung und Aktualisierung des Objekts zu erreichen.

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 Überweisungsklasse ändern, um nicht als Variable vorhanden zu sein. Dies sollte privat mit dem Objekt behandelt werden:

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

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top