0

我有一个类推荐。当您在类中创建对象时,它会检查输入字符串是否唯一(因此绝不允许重复对象)。但是当我发现输入字符串 str1 等于先前创建的对象的字符串时,我不想创建新对象或只是返回 false,而是想更改已创建对象的属性。但我无法弄清楚如何做到这一点,因为该方法无法知道对象的名称。但我知道它的独特之处!我觉得这必须足以以某种方式调用它,并做我需要做的事情。

有任何想法吗?
谢谢!

这是课程:

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

    }

        }
    }
4

3 回答 3

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

而且我会更改您的推荐类以不将 Occurrences 作为变量。这应该由对象私下处理:

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

}
于 2009-07-23T13:05:42.637 回答
0

为什么不在推荐对象本身之外创建一个推荐对象列表?这样,您可以检查列表以查看符合您条件的对象是否已经存在。如果是这样,请更新该对象。如果没有,请创建一个新的并将其添加到列表中。

要么使用静态列表,要么使用也在 Referrals 类之外声明的静态列表。

我不能 100% 确定你会用这个去哪里,所以希望其中一种方法对你有用。

于 2009-07-23T01:31:37.447 回答
0

尝试使用Dictionary.TryGetValue方法?

我不太明白你试图用你的代码做什么,而且有点晚了。

于 2009-07-23T01:46:14.510 回答