C# 从两个仅包含不同项的列表创建新列表?

C# 从两个仅包含不同项的列表创建新列表?,c#,C#,我有两个列表,其中包含一些值。我想创建一个新列表,并添加两个列表中所有不同的值 我是LINQ的新手,还没有这方面的经验。所以我是这样做的,但这不是我想要的 新列表仅包含该不同的值。如果该值在两个列表中都存在,则该值在新列表中仅存在一次 我通过使用Distinct扩展方法实现了它,但这不是我想要的…我希望新列表只包含Distinct值 代码: namespace ConsoleApp2 { 班级计划 { 静态void Main(字符串[]参数) { List firstList_名称=新列表()

我有两个列表,其中包含一些值。我想创建一个新列表,并添加两个列表中所有不同的值

我是LINQ的新手,还没有这方面的经验。所以我是这样做的,但这不是我想要的

新列表仅包含该不同的值。如果该值在两个列表中都存在,则该值在新列表中仅存在一次


我通过使用Distinct扩展方法实现了它,但这不是我想要的…我希望新列表只包含Distinct值

代码:

namespace ConsoleApp2
{
班级计划
{
静态void Main(字符串[]参数)
{
List firstList_名称=新列表()
{
“热汉”,
“哈姆扎”,
“阿迪尔”,
“阿里夫”,
“哈米德”,
“哈迪德”
};
List secondList_name=新列表()
{
“Mahboob”,
“泽山”,
“Rizwan”,
“哈米德”,
“热汉”,
“哈姆扎”
};
列表结果=新列表();
foreach(第一个列表中的var nameOfFirstList\u名称)
结果.添加(nameOfFirstList);
foreach(第二个列表中的第二个列表的变量名称)
结果.添加(namesOfSecondList);
Write(result.Distinct().Count());
}
}
}

为了只获取两个列表共有的项目,可以使用
System.Linq
扩展方法,该方法返回两个列表的交集:

var intersection = firstList_names.Intersect(secondList_names);

然而,你的问题有些混乱。如果希望两个列表中的所有项目(无任何重复项),则可以使用扩展方法:

var union = firstList_names.Union(secondList_names);

如果您想以“老式”的方式(不使用扩展方法)进行这些操作,您可以执行下面的示例

对于交叉口:

var intersection = new List<string>();

foreach(var item in firstList_names)
{
    if (secondList_names.Contains(item) && !intersection.Contains(item))
    {
        intersection.Add(item);
    }
}
var intersection=新列表();
foreach(firstList\u名称中的变量项)
{
if(secondList_names.Contains(项目)&&!intersection.Contains(项目))
{
添加(项目);
}
}
工会:

// Start with a list of the distinct firstList_names
var union = new List<string>();

foreach(var item in firstList_names)
{
    if (!union.Contains(item))
    {
        union.Add(item);
    }
}

// Add any items from the secondList_names that don't exist
foreach (var item in secondList_names)
{
    if (!union.Contains(item))
    {
        union.Add(item);
    }
}
//从不同的firstList\u名称列表开始
var union=新列表();
foreach(firstList\u名称中的变量项)
{
如果(!union.Contains(项目))
{
增加(项目);
}
}
//添加第二个列表中不存在的任何项目
foreach(第二个列表\u名称中的变量项)
{
如果(!union.Contains(项目))
{
增加(项目);
}
}
遵循以下示例(摘自)

int[]ints1={5,3,9,7,5,9,3,7};
int[]ints2={8,3,6,4,4,9,1,0};
IEnumerable并集=ints1.union(ints2);
foreach(并集中的整数)
{
Write(“{0}”,num);
}
/*
此代码生成以下输出:
5 3 9 7 8 6 4 1 0
*/

你需要像union这样的东西吗?是的@A.Roussos@SaniSinghHuttunen
Distinct()
AddRange()
之后不起作用,因为它返回void。@Rehan,由于缺少标点符号,问题变得模棱两可,您得到的答案会有所不同。此外,回答者也会感到困惑,因为您自己问题中的代码已经完全实现了您声称想要的功能:返回组合两个列表后得到的不同值。你说你不想要Distinct()扩展方法,但是如果你想要的结果是得到Distinct值,那么你已经有了解决方案<代码>var distinctResult=result.Distinct().ToList()也将包括不在两个列表中的项目@RehanShah我仍然不明白这一点:新列表只包含不同的值,如果该值在两个列表中都存在,那么该值在新列表中只会出现一次。您应该编辑您的问题以满足要求clear@Peter,他的要求很模糊,因为缺少标点符号。看起来“…如果两个列表中都有值,则只包含不同的值…”他真正的意思是“…仅包含不同的值。如果两个列表中都有值…”也令人困惑,因为他想要不同的值,但说他不想使用distinct()扩展方法。为什么我会被否决?仔细看我的问题……我写的所有东西都符合预期……为什么我会被否决?仔细看我的问题……我写的一切都符合预期……我想主要是你问题的第一个黄色方框中陈述的方式。有些人(包括我自己)认为您只想要两个列表(包含在两个列表中)不同的项目。投否决票的一个原因是问题是否“不清楚”,所以我怀疑这就是原因。不要认为这是针对个人的,只要尝试改进问题(如果你愿意),人们可能会删除他们的反对票。使用原始帖子中的示例,你可以再添加一行:
result=result.Distinct()
// Start with a list of the distinct firstList_names
var union = new List<string>();

foreach(var item in firstList_names)
{
    if (!union.Contains(item))
    {
        union.Add(item);
    }
}

// Add any items from the secondList_names that don't exist
foreach (var item in secondList_names)
{
    if (!union.Contains(item))
    {
        union.Add(item);
    }
}
    int[] ints1 = { 5, 3, 9, 7, 5, 9, 3, 7 };
int[] ints2 = { 8, 3, 6, 4, 4, 9, 1, 0 };

IEnumerable<int> union = ints1.Union(ints2);

foreach (int num in union)
{
    Console.Write("{0} ", num);
}

/*
 This code produces the following output:

 5 3 9 7 8 6 4 1 0
*/