2014-02-13 3 views
0

를 사용하여 문자열을 분리. 문자열을 객체로 변환하고 싶습니다. 나는 다른 방법이 있다는 것을 알고 있지만 LINQ를 사용하여 어떻게 끝내고 있는지보고 싶습니다. 이것은 내가 함께 왔어요 최선의 방법입니다 :개체 LINQ 학습에 주변에 점점 마지막으로 LINQ

using System; 
using System.Linq; 

public class Program 
{ 
    public static void Main() 
    { 
     string [] lines = new string[2]; 
     lines[0] = "John, 12345, true"; 
     lines[1] = "Miles, 45678, true"; 

     var o = from x in lines 
       select new { 
        name = x.Split(',')[0], 
        zip = Int32.Parse(x.Split(',')[1]), 
        status = bool.Parse(x.Split(',')[2]) 
       }; 
     foreach (var p in o) { 
      Console.WriteLine(p.name + " - " + p.zip + ", - " + p.status); 
     } 
    } 
} 

내 질문은 : 모든 Split()의를 사용하지 않고 더 나은 방법이 있나요? 여기는 바이올린이 있습니다 : http://dotnetfiddle.net/RSY48R.

+0

당신은 LinqToCSV 프로젝트를 살펴, https://github.com/mperdeck/LINQtoCSV –

+1

이것은 HTTP처럼 조금 느낌을 가지고 싶어 수 : // codereview.stackexchange.com/ 질문 – Liam

+4

이 문제는 코드가 작동하기 때문에 주제에서 벗어난 것으로 보인다, 그것은 단순히 일반적인 코드 검토를 요구하고있다. – Servy

답변

1
using System; 
using System.Linq; 

public class Program 
{ 
    public static void Main() 
    { 
     string [] lines = new string[2]; 
     lines[0] = "John, 12345, true"; 
     lines[1] = "Miles, 45678, true"; 

     var o = from x in lines 
       let eachLine = x.Split(',') 
       select new { 
        name = eachLine[0], 
        zip = Int32.Parse(eachLine[1]), 
        status = bool.Parse(eachLine[2]) 
       }; 
     foreach (var p in o) { 
      Console.WriteLine(p.name + " - " + p.zip + ", - " + p.status); 
     } 
    } 
} 

항상 let은 항상 여기에서 깨끗하다고 ​​생각합니다. 나는 split 이외의 더 좋은 방법이 있다고 생각하지 않는다. 나에게 좋아 보인다.

using System; 
using System.Linq; 

public class Program 
{ 
    public static void Main() 
    { 
     string [] lines = new string[2]; 
     lines[0] = "John, 12345, true"; 
     lines[1] = "Miles, 45678, true"; 

     var o = from line in 
        (
         from inner in lines 
         select inner.Split(',') 
        ) 
       select new { 
        name = line[0], 
        zip = Int32.Parse(line[1]), 
        status = bool.Parse(line[2]) 
       }; 
     foreach (var p in o) { 
      Console.WriteLine(p.name + " - " + p.zip + ", - " + p.status); 
     } 
    } 
} 

그것을하는 또 다른 방법은 아래에이 일의 '유창'길을 보여왔다 내부 선택 @Habib 함께, 이것은 내가 쉽게 와트가 진행되고 볼 수 있습니다 생각 쿼리 버전입니다.

는 LINQ로 여행을 즐기십시오! 당신이 존 소총의 'C# In Depth'의 사본을 얻을 수 있다면

는 LINQ에 대한 부분은 절대적으로 훌륭합니다. 나머지는이 책과 같습니다.

+0

대신에'let'을 사용하면 더 깔끔한 중첩 된 선택을 할 수 있습니다 – user2711965

+0

Downvoter, 아마 정교하게 만들까요? 문제를 해결하기 위해 다른 방법이 있기 때문에 – Tarec

+0

@Tarec, 나는, 내 위의 코멘트 당신은 좋은 답변을 downvoting하고 @NewHire – user2711965

2
var query = lines.Select(r => r.Split(',')) 
        .Select(t => new 
         { 
          name = t[0], 
          zip = int.Parse(t[1]), 
          status = bool.Parse(t[2]) 
         }); 
foreach (var p in query) 
{ 
    Console.WriteLine(p.name + " - " + p.zip + ", - " + p.status); 
} 

그리고 당신은 얻을 것이다 :

John - 12345, - True 
Miles - 45678, - True 
+2

let 절에 투표 할 예정입니다. 더 깨끗한 방법입니다. –