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