2010-01-20 2 views
2

정확하게이 질문의 제목을 지정하는 방법을 잘 모르겠지만 여기에 내가하려고하는 것이 있습니다.C# 필드 형식을 전달하여 메서드를 결합합니까?

ID, 성 및 이름 필드가있는 Customer 클래스가 있다고 가정 해보십시오. 이제는 고객 목록이 있고 내가 지정한 ID, 이름 또는 성을 콘솔에 쓰는 한 가지 방법을 쓰고 싶습니다.

본질적으로, 각 필드 유형을 인쇄하는 세 가지 별도의 메소드를 작성하는 대신 인쇄하고 싶은 필드를 허용하는 한 가지 방법을 쓰고 싶습니다.

나는 지난 몇 일 동안 C#에서이 작업을 수행하는 방법에 대해 읽었습니다하지만 내 뇌가 과부하에 알고 내 마음을 미끄러됩니다 ....

어떤 도움을 주시면 감사하겠습니다.

답변

10
public void PrintCustomer<T>(Customer c, Func<Customer, T> func) 
{ 
    Console.WriteLine("{0} , {1}", c.ID, func(c)); 
} 

사용법 :

PrintCustomer(myCustomer, c => c.FirstName); 

또는

PrintCustomer(myCustomer, c => c.LastName); 
+0

기능 프로그래밍 규칙 !!! –

+0

다른 해결책으로이 솔루션의 개선점으로 생각하는 것을 추가했습니다 ... –

0

인수로 열거를 사용? 각 열거 값은

반환 값의 유형은 클라이언트 코드에서 숨길 수 있습니다 ...

0

이 BFree의 대답에 단 댓글이 정말하지만 난 구문 강조를하고 싶어 ... 다른 타겟 필드 다음 서명을 사용합니다. 나는 이것이 개선이라고 생각할 것이다.

public static void PrintCustomer(Customer c, Func<Customer, string> func) 
{ 
    Console.WriteLine("{0} , {1}", c.ID, func(c)); 
} 
+0

그런 다음 "PrintCustomer (myCustomer, c => c.ID.ToString());"을 입력하지 않아도됩니다. " "PrintCustomer (myCustomer, c => c.ID)"대신 " Customer.ID가 정수인 경우? – Kevin

관련 문제