2012-05-15 3 views
0

다른 항목 목록의 특성에서 항목 목록을 작성해야하는 경우가 종종 있습니다. 내가 가지고 접근 방법은 종종 다음과 유사한 : 이제다른 형식의 특성에서 형식 목록을 얻는 람다 식

public class MyClass 
    { 
     public Guid Identifier { get; set; } 
     public byte[] Bytes { get; set; } 
     public int ForeignKey { get; set; } 

     public static List<MyClass> AllMyClass { get; } 
    } 

    private List<Guid> GetIdentifiers(int foreignKey) 
    { 
     List<Guid> identifiers = new List<Guid>(); 
     foreach (var item in MyClass.AllMyClass.FindAll(c => c.ForeignKey == foreignKey) 
     { 
      identifiers.Add(item.Identifier); 
     } 
     return identifiers; 
    } 

하는 람다 표현식이 구현 빨리/간단한 방법은 무엇입니까? 마찬가지로, 나는 하나 개의 라인으로 작업을 응축 싶습니다 또한

List<Guid> identifiers = MyClass.AllMyClass.MagicExpression(c => c.ForeignKey == foreignKey); 

는 등의 표현으로는 .NET 2.0 프레임 워크에 대한 수 있을까요?

+1

.NET Framework 2.0에서 람다 식을 사용할 수 없다고 생각합니다. – Kane

+1

@Kane - lambdas는 프레임 워크 기능이 아닌 언어 기능입니다. C# 3 \ 4 컴파일러를 사용하여 2.0을 타겟팅하는 동안 lambda를 사용할 수 있다고 생각합니다. – Lee

답변

2

나는 그런 일이 일 것이라고 생각 :

List<Guid> identifiers = MyClass.AllMyClass.Where(x => x.ForeignKey == foreignKey).Select(x => x.Identifier).ToList(); 

더 이상, 그들은 닷넷 2.0에는 람다 식을 것 없습니다.

1

MagicExpression은 일반적으로 Where이라고합니다.

그리고 내가 아는 한 LINQ도 lambda도 아니고 .Net 2.0에도 확장 방법이 없습니다. 그래서 두 번째 질문에 대한 대답은 아마도 아니오입니다.

+0

네, 제가 작업하고있는 제품은 .net 2.0으로 제작되었으며 Win2000에서 Win7-64bit까지의 워크 스테이션에 사용됩니다. 프레임 워크를 업그레이드하는 것은 Win2000 워크 스테이션을 버리는 것을 의미합니다. 제품 소유자가 결정할 때까지는 그렇게하지 마십시오. – MoSlo

+1

@MoSlo 조금 해킹하고 싶다면 정적 인 Extensions.Where 메서드를 구현하여 목록과 대리자를 만들고 [익명 메소드] (http://msdn.microsoft.com/en-us)를 사용할 수 있습니다. /library/0yw3tz5k%28v=vs.80%29.aspx) 대신 lambdas를 사용하십시오. 그건 그냥 빈티지 자동차에 오늘날의 휠을 장착하고 장점 ... – phg

+0

@MoSlo 만약 대통령의 권한을 제공하는지, 바퀴를 재발견 않을 것이다, 당신도 람다를 해결할 필요가 없습니다. 결국 그것은 대표자이기 때문에 의미가 있습니다. LINQ를 사용할 수 없습니다. – phg