C# 显示两个字符串之间的交点

C# 显示两个字符串之间的交点,c#,string,C#,String,我试图找到两条线的交点。例如,如果字符串一是我的车坏了,字符串二是我的马好了,它将返回我的是。 这是我的代码: public static string intersection2(string x1, string x2) { string[] string1 = x1.Split(' '); string[] string2 = x2.Split(' '); string[] m = string1.Distinct(); string[] n = string2.Distinct

我试图找到两条线的交点。例如,如果字符串一是
我的车坏了
,字符串二是
我的马好了
,它将返回
我的是
。 这是我的代码:

  public static string intersection2(string x1, string x2)
{
  string[] string1 = x1.Split(' ');
string[] string2 = x2.Split(' ');
string[] m = string1.Distinct();
 string[] n = string2.Distinct();
  string Test;
 var results = m.Intersect(n,StringComparer.OrdinalIgnoreCase);
 Test = results.ToString();
   return Test;

}

但是我得到了错误
System.Linq.Enumerable+d_u92
1[System.String]`。有人能解释一下发生了什么事,以及我如何修复它吗?

你的逻辑是正确的,你可以通过修复一点来让它工作

public static string intersection2(string x1, string x2)
{
    string[] string1 = x1.Split(' ');
    string[] string2 = x2.Split(' ');
    var m = string1.Distinct();
    var n = string2.Distinct();

    var results = m.Intersect(n, StringComparer.OrdinalIgnoreCase);
    //The result is a list of string, so we just have to concat them
    var test = " ";
    foreach(var k in results) test += k + " ";
    return test;
}

工作小提琴:

您没有看到错误-您看到的是
结果类型的完全限定名,即
System.Linq.Enumerable+d_921[System.String]
。这是
ToString()
的默认行为,除非它在继承类中被重写。看

要显示交叉点的结果,可以使用
String.Join
,如下所示:

Test = String.Join(" ", results);
string[] string1 = x1.Split(' ');
string[] string2 = x2.Split(' ');
string Test;
var results = string1.Intersect(string2, StringComparer.OrdinalIgnoreCase);
Test = string.Join(" ", results);
这将产生
my is

请注意,您发布的代码不会编译:

string[] m = string1.Distinct();
string[] n = string2.Distinct();
上面生成的
行无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“string[]”
。添加
.ToArray()
是解决此问题的一种方法。完整代码如下:

public static string intersection2(string x1, string x2)
{

    string[] string1 = x1.Split(' ');
    string[] string2 = x2.Split(' ');
    string[] m = string1.Distinct().ToArray();
    string[] n = string2.Distinct().ToArray();
    string Test;
    var results = m.Intersect(n, StringComparer.OrdinalIgnoreCase);
    Test = String.Join(" ", results);
    return Test;
}

这基本上是因为您厌倦了获取
IEnumerable
string
表示,这是完全正常的,因为它返回
object
类的默认
ToString()
。因此,为了解决这个问题,您应该以某种方式创建自己的字符串表示形式,即s.t.,如下所示:

Test = String.Join(" ", results);
string[] string1 = x1.Split(' ');
string[] string2 = x2.Split(' ');
string Test;
var results = string1.Intersect(string2, StringComparer.OrdinalIgnoreCase);
Test = string.Join(" ", results);

还请注意,不需要获取数组的
Distinct
结果,因为
Intersect
是一个集合操作,自然返回
Distict
结果

此程序获取两个字符串的交集(假设允许重复)

公共字符串getcrossion(字符串s1、字符串s2){
字符串common=“”;
对于(int i=0;i
您希望发生什么?你能提供一些示例输入和你想做什么吗?它应该返回两个字符串之间的交集,字符串1:我的车坏了字符串2:我的车vry好结果:我的车
ToString()
,对象的默认行为是返回对象的类型名。您需要遍历
results
以显示实际结果,或者使用类似
String.Join的内容将其连接起来。