string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
split 메소드가 문자열을 반환하는 원인이 작동하지 않습니다.
string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
split 메소드가 문자열을 반환하는 원인이 작동하지 않습니다.
답변:
이를 수행하는 한 가지 방법이 있습니다.
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
List<int> TagIds = new List<int>(tags.Split(',').Select(int.Parse));
new List<>
있습니까?
ToList()
대신 전화 할 수 있습니다 . 결과는 본질적으로 동일하다 : List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
의 반환 값이 있기 때문에 당신은,하지만, 둘 중 하나를 할 필요가 Select()
입니다 IEnumerable<>
아니지만List<>
Select
경우 확장이 반환 IEnumerable<Int32>
되고 목록에 없으므로 yes 입니다. 그러나 list에는 다른 컬렉션을 소스로 허용하는 생성자가 있습니다.
Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries)
간단한 유효성 검사를 포함하고 예외를 throw하는 대신 유효하지 않은 값을 건너 뛰려면 TryParse를 사용하는 것이 있습니다.
string csv = "1,2,3,4,a,5";
int mos = 0;
var intList = csv.Split(',')
.Select(m => { int.TryParse(m, out mos); return mos; })
.Where(m => m != 0)
.ToList();
//returns a list with integers: 1, 2, 3, 4, 5
편집 : 다음은 Antoine의 피드백을 기반으로 업데이트 된 쿼리입니다. 먼저 TryParse를 호출하여 잘못된 값을 필터링 한 다음 구문 분석하여 실제 변환을 수행합니다.
string csv = "1,2,3,4,a,5,0,3,r,5";
int mos = 0;
var intList = csv.Split(',')
.Where(m => int.TryParse(m, out mos))
.Select(m => int.Parse(m))
.ToList();
//returns a list with integers: 1, 2, 3, 4, 5, 0, 3, 5
편집 2 : Charles Burns의 피드백 덕분에 C # 7.0에 대한 업데이트 된 쿼리입니다. 이 접근법으로 여분의 mos 변수를 제거하므로 조금 더 깔끔합니다.
string csv = "1,2,3,4,a,5,0,3,r,5";
var intList = csv.Split(',')
.Where(m => int.TryParse(m, out _))
.Select(m => int.Parse(m))
.ToList();
int.TryParse(m, out int _)
LINQ Query가 없으면이 방법을 선택할 수 있습니다.
string tags = "9,3,12,43,2";
List<string> numbers = nos.Split(',').ToList<string>();
그런 다음이 목록을 정수 유형으로 변환 할 수 있습니다 ...
.ToList<string>()
여전히 필요using System.Linq;
string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',').Select(x => x.Trim()).Select(x=> Int32.Parse(x)).ToList();
.Select(x => x.Trim()
Parse는 자동으로 공백 문자 를 자르므로을 추가 할 필요가 없습니다 .
C # 3.5를 사용하는 경우 Linq를 사용하여이를 달성 할 수 있습니다.
string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(s=>int.Parse(s)).ToList();
또는 짧은 것
string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(int.Parse).ToList();
khalid13의 답변을 수정했습니다. 사용자가 "0"문자열을 넣으면 결과 목록에서 해당 문자열을 제거합니다. 나는 비슷한 것을했지만 익명의 객체를 사용했습니다.
var result = commaSeparatedString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(s => new { didConvert = int.TryParse(s.TrimNullProtection(), out convertedInt), convertedValue = convertedInt })
.Where(w => w.didConvert)
.Select(s => s.convertedValue)
.ToList();
TrimNullProtection은 문자열이 null인지 보호하는 사용자 정의 함수입니다.
위의 작업은 오류없이 변환 할 수없는 문자열을 제거하는 것입니다. 변환에 문제가있는 경우 오류가 발생하면 수락 된 답변이 트릭을 수행해야합니다.