c#通过唯一属性调用对象

时间:2009-07-23 01:20:05

标签: c# object methods unique call

我有一个班级推荐。在类中创建对象时,它会检查输入字符串是否唯一(因此永远不允许重复的对象)。但是当我发现输入字符串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++;
    }

    }

        }
    }

3 个答案:

答案 0 :(得分:0)

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

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

我不是百分之百确定你要去哪里,所以希望其中一种方法适合你。

答案 1 :(得分:0)

尝试使用Dictionary.TryGetValue方法?

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

答案 2 :(得分: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++;
   } 

}