2 개의 문자열 목록이 있습니다.
List<string> A = new List<string> { "1QWERTY", "ASDF4B2J", "C0QW", "8D" };
List<string> B = new List<string> { "GJ65SJ2", "KO21L94B", "ABF287KF2", "GPK25" };
LINQ를 사용하여 길이가 같은 문자열의 첫 번째와 두 번째 문자 쌍을 얻고 싶습니다.
좋아요 1Q: GJ
또는 AS: KO
.
그래서이 코드를 작성했습니다.
var res = A.Join(
B,
a => a.Length,
b => b.Length,
(a, b) => new { str = a[0] + a[1] + ": " + b[0] + b[1] }
);
foreach (var e in res)
{
Console.WriteLine(e.str);
}
그러나 대신 1Q
또는 AS
사용 a[0]
하고 a[1]
몇 가지 숫자를 얻었습니다.
따라서이 요청의 결과는 다음과 같습니다.
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: KO
그렇다면 왜 그렇게 작동하며 올바르게 작동하도록 코드를 어떻게 변경해야합니까?
이것은 linq와 관련이 없습니다.
a[0]
이 char
아니라 string
. 아마 혼동을 위해 정의 된 더하기 연산자가 없습니다 char
: 두 개의 추가 할 수 없습니다 chars
을 얻기 위해 서로를 string
.
그러나 a char
는 암시 적으로 정수 형식으로 변환 할 수 있으며에 대한 더하기 연산자가 ints
있습니다. 그래서 만약 그렇게한다면 그것은 정수인으로 'A' + 'B'
변환됩니다 .65 + 66
131
그런 다음 이것을 string
. 문자열이 아닌 것을 string
호출 ToString()
한 다음이를 문자열과 연결하여 작동 하는 덧셈 연산자와 a 사이에 정의 된 덧셈 연산자가 있습니다 . 그래서 131 + ": "
와 동일한 131.ToString() + ": "
문자열 인 "131: "
.
우리가 추가 왔을 때 b[0]
와 b[1]
, 우리는 먼저 추가 수행하여이 작업을 수행 "131: " + b[0]
. 이것은 위와 같은 문자열 추가에 대한 동일한 규칙을 따르므로 "131: " + b[0].ToString()
, 예를 들어 "131: " + 'C'.ToString()
"131 : C"인으로 바뀝니다. 그런 다음 b[1]
.
원하는 작업을 수행하는 방법에는 여러 가지가 있습니다 . a[0].ToString() + a[1] + ": " + ...
먼저 char
이를 string
. 또는 "" + 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 자 길이의 문자열이있는 경우이 중 어느 것도 안전하지 않습니다!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다