2014-12-05 3 views
1

foreach는 비슷한 방법을 만들려면 어떻게해야합니까,하지만 난 foreach는어떻게이 순전히 학문적 인

말과 같은 방법을 만들 것입니다 내가 어떻게 다음

SomeTenumerable.MyOwnFunction(x => 
     { 
      x.Id = 0; 
      x.Order_Id = 0; 
     }); 

주처럼 뭔가를 원하는 경우 : 난 그냥 func에 익숙해 져있어, 그게 똑같은지 잘 모르겠다.

당신이 적절한 이름/레이블을 무엇을 성취하려고 하는지를 알 수 있다면, 나는 일종의 델리게이트를 추측한다. ? 나는 정기적으로 사용 https://dotnetfiddle.net/v7JKoo

.Each 확장 - - http://extensionmethod.net/csharp/ienumerable-t/each-t

public static void Each<T>(this IEnumerable<T> items, Action<T> action) 
{ 
    if (items == null) return; 

    foreach (var item in items) 
     action(item); 
} 

예에서 가져온

이해의 부족을 용서, 내가 여기

+0

C#'foreach' 문은 함수가 아니므로 함수와 같은 함수를 만드는 것이 무엇을 의미합니까? 'List '유형에는'ForEach()'메소드가 있습니다. 어떻게 구현되는지 여기에서 확인할 수 있습니다 : http://referencesource.microsoft.com/mscorlib/a.html#0e5a9cf0a310b9e5 –

답변

3

데모이 물건을 알아 내려고 노력하고 있어요 :

var items = new List<Item>(); 
// populate items 
items.Each(item => item.DoSomething()); 

예 y 당신이 항목을 linqs 어디에요 또는 ALL 기타 사항 서보 -OFF

+0

'items'는 어떻게'null'입니까? 확장 메서드도 정적으로 호출 할 수있을 것 같아요? –

+0

@PaulBellora : 확장 메소드는 정적으로 호출되는 _always_입니다.그것들은 정적 메서드입니다. 그리고 예, 'this'로 전달 된 참조는 'null'일 수 있습니다. –

+0

@PeterDuniho 좋은 캐치! 늦은 밤 코딩 실패 - 지금 키보드 내려 놓기 –

0

추가 속성 클래스를 보면 돌아 보는 경우 OU는 각 항목

PS에서 수행하는 대리인 (여기가 액션이다)에 전달하는

Public MyClass 
{ 
    public static int Id {get;set;} 
    public static int Order_Id{get;set;} 
} 

당신은 당신을 통해 조회 할 수 있습니다이

IEnumerable<MyClass> myclass = new IEnumerable<MyClass>(
{ 
    Id = 0; 
    Order_Id = 0; 
}); 

처럼 설정할 수 serach 던져 등

이 질문하기, Here 질문 자체가 anwer가 아닙니다.

1

나는 (당신이 코드 here을 볼 수 있습니다) 싶은 것은 확장 메서드 (MSDN)

를 ForEach는 List 클래스의 방법을 만들 생각합니다. 클래스에 메서드를 추가 할 수 없으므로 프로젝트에 있지만 원래의 List 클래스의 일부로 사용할 수있는 확장 메서드를 만들 수 있습니다.

static class HelperMethods 
{ 
    public static void ResetAll(this List<IYourInterface> collection) 
    { 
     collection.ForEach(x => 
     { 
      x.Id = 0; 
      x.Order_Id = 0; 
     }); 
    } 
} 

을 그리고 목록의 인스턴스에 대한 방법을 사용하십시오

은의이 항목 당신은 정적 클래스의 정적 메서드를 만들이 인터페이스

public interface IYourInterface 
{ 
    int Id; 
    int Order_Id; 
} 

를 사용한다고 가정 해 봅시다.

var collection = new List<IYourInterface>(); 
collection.ResetAll(); 

var otherStuff = new List<string>(); 
// This won't work because because List<string> cannot 
// be converted to List<IYourInterface> 
// otherStuff.ResetAll();  
관련 문제