C# 我希望获得长度相同的字符串的第一个和第二个字母对(使用LINQ)
我有两个字符串列表C# 我希望获得长度相同的字符串的第一个和第二个字母对(使用LINQ),c#,string,list,linq,C#,String,List,Linq,我有两个字符串列表 List A=新列表{“1QWERTY”、“ASDF4B2J”、“C0QW”、“8D”}; 列表B=新列表{“GJ65SJ2”、“KO21L94B”、“ABF287KF2”、“GPK25”}; 我想得到一对长度相同的字符串的第一个字母和第二个字母(通过使用LINQ) 像1Q:GJ或AS:KO 所以,我写了这段代码: var res=A.连接( B a=>a.长度, b=>b.长度, (a,b)=>new{str=a[0]+a[1]+”:“+b[0]+b[1]} ); for
List A=新列表{“1QWERTY”、“ASDF4B2J”、“C0QW”、“8D”};
列表B=新列表{“GJ65SJ2”、“KO21L94B”、“ABF287KF2”、“GPK25”};
我想得到一对长度相同的字符串的第一个字母和第二个字母(通过使用LINQ)
像1Q:GJ
或AS:KO
所以,我写了这段代码:
var res=A.连接(
B
a=>a.长度,
b=>b.长度,
(a,b)=>new{str=a[0]+a[1]+”:“+b[0]+b[1]}
);
foreach(在res中的变量e)
{
控制台写入线(e.str);
}
但是我没有使用a[0]
和a[1]
来代替1Q
或AS
,而是得到了一些数字。因此,该请求的结果是:
130:GJ
148:KO
但是当我只使用a[0]
或a[1]
时:
var res=A.Join(B,A=>A.Length,B=>B.Length,(A,B)=>new{str=A[0]+”:“+B[0]+B[1]});
我得到了一个正确的符号,比如:
1:GJ
A:高
那么,为什么它会这样工作?我应该如何更改代码以使其正常工作?这与linq无关
a[0]
是字符
,而不是字符串
。可能令人困惑的是,没有为char
定义加法运算符:您不能将两个char
添加到一起以获得字符串
但是,char
可以隐式转换为整数类型,并且有一个用于ints
的加法运算符。因此,如果执行'A'+'B'
,则会转换为65+66
,即整数131
然后我们尝试将其添加到字符串中。在anything和string
之间定义了一个加法运算符,它通过对非字符串的对象调用ToString()
,然后将其与字符串连接起来来工作。因此131+”:“
与131.ToString()+”:“
,即字符串”131:“
当我们添加b[0]
和b[1]
时,我们通过添加first doing“131:+b[0]
来实现这一点。这与上面关于字符串添加的规则相同,因此转换为“131:+b[0].ToString()
,例如“131:”+“C”。ToString()
,即“131:C”。然后我们在添加b[1]
时也会这样做
有几种方法可以满足您的需要:您可以执行a[0]。ToString()+a[1]+“:“+…
强制将第一个char
转换为字符串。或者您可以执行“”+a[0]+…
来实现相同的目标。不过,最简单的方法是根本不使用字符串连接,而是使用$“{a[0]}{a[1]}:{b[0]}{b[1]}”
另一种方法是不选择单个字符,而是将前两个字符作为字符串拉出,而不是a.Substring(0,2)
。然后您可以编写a.Substring(0,2)+:“+b.Substring(0,2)
,或者$”{a.Substring(0,2)}:{b.Substring(0,2)}`
请注意,如果您有任何长度为0或1个字符的字符串,这一切都不安全 只需将方法中的结果选择器Func
更新为
(a,b)=>新的{str=$“{a.Substring(0,2)}:{b.Substring(0,2)}”
这将从a
和b
字符串中获取前两个字母,并使用将它们连接成一个字符串。输出将如下所示
1Q:GJ
AS:KO
在您的解决方案中,不要使用字符串索引,而是使用字符串子字符串,如下所示
var res = A.Join(B,
a => a.Length,
b => b.Length,
(a, b) => new { str = a.Substring(0,2) + ":" + b.Substring(0,2) });
因为您刚才添加了:“
。因此,您正在将b[0]
和b[1]
添加到字符串中,而不是添加到另一个字符中。谢谢,我在[0]之前添加了“”,现在它可以工作了,但是我应该如何更改代码以使其更通用,而不添加“”?@Roomey使用插值或string.Format
。我会使用string.Format
来处理这种事情,也可以使用,它有一个接受单个字符的Append方法重载。