Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将对象存储为集合中的项_C# - Fatal编程技术网

C# 将对象存储为集合中的项

C# 将对象存储为集合中的项,c#,C#,如果我有两个收藏要浏览,我想跟踪它们,那么最好的方法是什么 BusinessObject1可以具有Int32id,例如1,2,3,4,5 BusinessObject2可以具有Stringid,例如“测试1”、“测试2”、“测试3” 我希望能够随时保存这些对象的列表,并循环检查它们是否存在于集合中。因此,现实的情况可能是: 项目1:1,“测试1” 项目2:2,“测试1” 项目3:2,“测试2” 项目4:3,“测试2” 我不能使用字典,因为键必须是唯一的。这是一种多对多的关系 你们觉得怎么样?你们

如果我有两个收藏要浏览,我想跟踪它们,那么最好的方法是什么

BusinessObject1
可以具有
Int32
id,例如1,2,3,4,5
BusinessObject2
可以具有
String
id,例如“测试1”、“测试2”、“测试3”

我希望能够随时保存这些对象的列表,并循环检查它们是否存在于集合中。因此,现实的情况可能是:

项目1:1,“测试1” 项目2:2,“测试1” 项目3:2,“测试2” 项目4:3,“测试2”


我不能使用字典,因为键必须是唯一的。这是一种多对多的关系


你们觉得怎么样?

你们可以有一个元组列表

List<Tuple<int, string>> myCollection = new List<Tuple<int, string>>()
{
    {1, "Test 1"},
    {1, "Test 1"},
    {2, "Test 2"},
    {3, "Test 2"}
};
编辑:添加Linq示例

这将获得伪键为
1

var ones = myCollection.Where(tuple => tuple.Item1 == 1).ToList();
为什么不直接使用LINQ呢

IEnumerable<BusinessObject1> businessObjects = ...;

if (businessObjects.Any(arg => arg.Id == 1))
{
    ...
}
IEnumerable businessObjects=。。。;
if(businessObjects.Any(arg=>arg.Id==1))
{
...
}

如果您想在同一个列表中存储两种类型,您可以执行类似的操作,使用列表将“object”更改为您可能正在使用的公共基本对象


密钥是否需要唯一?你是说你的不是?一本字典必须是确定无疑的。否则,您可以使用任何普通集合,并使用
.any()
,前提是ID是一个成员。。。他不能用它。他的例子表明这是一种多对多的关系。我知道钥匙必须是独一无二的。我想这很清楚。我猜第1项和第2项似乎都不一样,这可能是字典不起作用的原因,但他提到想在收藏中查找它们,这意味着他不想要重复的。很混乱,这很混乱。我仍然不确定他的一组业务对象是否可以有重复的键。我甚至不确定他是否在问要将它们放入什么,即使他是,int和string可能需要替换为
BusinessObject1
BusinessObject2
。我并不是责怪你,我只是认为没有提供足够的数据来提供准确的答案。@Magus如果是这种情况,他应该使用列表和linq。。。。就像NathanAldenSr的回答,但我不知道为什么OP会问这个问题,除非他不认识Linq。。。或者列表是如何工作的。谁知道呢。
IEnumerable<BusinessObject1> businessObjects = ...;

if (businessObjects.Any(arg => arg.Id == 1))
{
    ...
}