对象集合的初级问题

santawen 2008-05-21 07:42:13
1、我从CollectionBase继承生成我自己的类,请问这与从Collection继承有什么不同?

2、向对象集合添加了对象后,如何查找这个对象?我使用的Equals用法有什么问题吗。是否有直接查找的方法
public class QASet : CollectionBase
{

public void Add(QA newQA)
{
List.Add(newQA);
}

public bool Seek(QA SeekQA)
{
bool isFind = false;
for (int i = 0; i < List.Count; i++)
{
if (List[i].Equals(SeekQA))
{
isFind = true;
break;
}
}
return isFind;

}
}

我使用的测试代码如下:
QASet target = new QASet();

target.Add(new QA("my Q","my A"));

QA TestQA = new QA("my Q", "my A"); 这一行失败了
//QA TestQA = target[0]; 改成这一行可以通过,但是我想要上一行可以通过
Assert.AreEqual(true,target.Seek(TestQA));




=================
PS:感谢你看到这里,请不要回复MSDN之类笼统地话语。我承认我用不好MSDN,希望可以通过你的帮助使我不断进步。
...全文
82 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
santawen 2008-05-21
  • 打赏
  • 举报
回复
第二个问题解决了,对于List[i] 这样的东西,不能直接拿来用,即使用(QA)(List[i] )也不行,会抱错。但是,可以加一个变量,赋值一下。我通过的代码是这样的:

public int Seek(QA value)
{
QA testvalue;
for (int i = 0; i < List.Count; i++)
{
testvalue = (QA)List[i];

if (testvalue.Question==value.Question&& testvalue.Answer==value.Answer)
{
return i;
break;
}

}
return -1;
}


感谢各位的帮助,期待你们能继续帮助我以及类似的生手。
santawen 2008-05-21
  • 打赏
  • 举报
回复
if (List[i].Question == value.Question)

报错:
错误 1 “object”不包含“Question”的定义,并且找不到可接受类型为“object”的第一个参数的扩展方法“Question”(是否缺少 using 指令或程序集引用?) D:\Myfile\C#\QAModify\QAFile\QAS.cs 57 29 QAFile


为什么无法通过List[]访问到 QA对象的属性?要通过什么方式才能比较指定的QA对象是否处于列表里?
weiyue_net 2008-05-21
  • 打赏
  • 举报
回复
1、我从CollectionBase继承生成我自己的类,请问这与从Collection继承有什么不同?

.NET没有“Collection”这个类,你可以继承一个具体的类例如System.Collections.Queue


2、向对象集合添加了对象后,如何查找这个对象?我使用的Equals用法有什么问题吗。是否有直接查找的方法

你需要在QA类中 Override “Eaquals” 方法

3. QA TestQA = new QA("my Q", "my A"); 这一行失败了
//QA TestQA = target[0]; 改成这一行可以通过,但是我想要上一行可以通过

为QA 类写一个Constructor
KafeeChan 2008-05-21
  • 打赏
  • 举报
回复
Equals是判断指针是否指向同一块内存。你new了2个对象,当然不是同一个块内存啦

public bool Seek(QA SeekQA)
{
bool isFind = false;
for (int i = 0; i < List.Count; i++)
{
//if (List[i].Equals(SeekQA))
if(List[i].属性1 == SeekQA.属性1 && List[i].属性2 == SeekQA.属性2)
{
isFind = true;
break;
}
}
return isFind;

}
ojekleen 2008-05-21
  • 打赏
  • 举报
回复
集合有建索引的,你可以直接

QASet qa=new QASet ();
obj obj=qa[0];//这要看你是什么类型的集合

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧