2009-05-22 1 views

답변

18

의 우리가 List<string>을 가지고 문자열의 길이가 아래 코드는 결과에 대한 List<string>를 반환합니다 이상 5

을 어디 있는지 만 항목을 원하는 가정 해 봅시다 '세계를 포함 할거야!' 및 '큰 !!'. 이 예제에서는 anonymous method을 사용합니다.

List<string> myList = new List<string>(); 
// .. 
List<string> resultList = myList.FindAll(OnlyLargerThanFive); 

//.. 

private static bool OnlyLargerThanFive(string s) 
{ 
    return s.Length > 5; 
} 

은 위의 위임, OnlyLargerThanFive은 또한 Predicate라고합니다 : 그것은 또한 쓸 수 있습니다.

+0

좋은 솔루션이지만 내부적으로 foreach를 사용하지 않을까요? 나는 Kthevar가 자기 자신을 되풀이하고 싶지 않다는 것을 의미한다고 생각했지만 – RobV

+1

lamdas에 처음 오 셨다면 어떻게 myList.FindAll (l => l.Length> 5)을 할 수 없습니까? –

+0

@RobV : '정상' for 'loop 내부적으로. 내가 틀렸다면 누군가를 정정하십시오. – Razzie

2

@Razzie에 의해 말한 방법 외에도 LINQ을 사용할 수도 있습니다.

List<string> myList = new List<string>(); 
myList.Add("hello"); 
myList.Add("world!"); 
myList.Add("one"); 
myList.Add("large!!"); 

var filtered=from s in myList where s.Length > 5 select s; 

PS : - : '

List<Item> l; 
l.FindAll(n => n.Something == SomethingElse); 

그것은 내부적으로 foreach 문을 사용할 수 있지만 당신은 할 수 는 가장 좋은 방법은 람다를 사용하는 것입니다 .NET 3과

+1

그는 LINQ가없는 C# 2.0에 대해 이야기하고있었습니다. 그 외, 당신은 정확합니다 (이 예제에서는 람다 구문을 사용합니다). – Razzie

+0

감사합니다. @Razzie PS를 대답에 추가했습니다. – TheVillageIdiot

3

이상 만 가능 전체 목록을 반복하지 않고 실제로 필터링합니다.

+0

질문은 2.0 용으로, lamda는 지원되지 않습니다. –

+0

죄송합니다. 주의. – Migol

0

LINQ을 사용할 수 있습니다. 나는이 테스트를하지 않은,하지만 난 단지 "P"로 시작하는 것들 보여 파이 충전물의 내 목록의 요소를 필터링 할 수 있습니다 믿습니다 <이> .Find합니다 (제공

List<string> list = new List<string>(); 

list.Add("Apple"); 
list.Add("Peach"); 
list.Add("Chocolate"); 
list.Add("Pear"); 
list.Add("Pumpkin"); 
list.Add("Cherry"); 
list.Add("Coconut"); 


var filteredOnes = from item in list 
        where item.StartsWith("P") 
        select item; 
+0

영업 사원이 C# 2.0이라고 말한 사실은 완전히 파열되었습니다. 확실히 LINQ가 없지만 OP가 업그레이드되면 작동합니다. – itsmatt

3

목록 첫 번째 일치하는 항목) 및 List.FindAll()은 일치하는 모든 항목을 제공합니다.

내가 가진 클래스 보고서 :

public class Report 
{ 
    public string ReportName; 
    public ReportColumnList ReportColumnList; 
} 

하고 목록 곳에서 항목을 찾으려면 보고서

의 목록
List<Report> reportList; 

복합 유형 것 목록이 예는 다음과 같다 ReportName = 'MyReport'이면 코드는 다음과 같습니다.

string reportName = "MyReport"; 
List<Report> myReports = reportList.FindAll(delegate(Report obj) { return obj.ReportName == reportName; }); 

첫 번째 보고서를 얻으려면 : 대리자에 전달 된 객체 목록이을 채워되는으로 유형해야한다는

Report rc = reportList.Find(delegate(Report obj) { return obj.ReportName == reportName; }); 

참고.

0

LINQ과 같이 사용할 수 있습니다.

List<string> List = new List<string> { "i", "am", "using", "LINQ!" }; List<string> result = myList.Where(s => s.Length > 3).ToList();

는 단지 .NET 세 이상에서 일하고있어.

관련 문제