2013-04-18 2 views
1

에 일반적인 기능 변환 :C 번호 : 나는 다음과 같은 기능을 가지고 Func을 객체

private int GetEnumTypeUnderlyingId<T>() 
     { 
      return (int)Enum.Parse(typeof(T), Enum.GetName(typeof(T), _franchise.LogonDialog)); 
     } 

은 내가 Func type로 변환 할 수 있습니다. 나는 다음과 같이 씁니다 :

Func<int> GetEnumTypeUnderlyingIdFunc<T> =() => (int)Enum.Parse(typeof(T), Enum.GetName(typeof(T), _franchise.LogonDialog)); 

그러나 이것은 작동하지 않습니다. Func <>, 제네릭 및 람다 식으로 작업 할 때 어떤 도움도 크게 받으실 수 없으므로 편안하지 않습니다.

+0

그것은 C 번호는 람다 표현식은 여전히'T'에 따라 일반 속성 –

답변

2

자신 만의 대리인을 정의 할 수 있습니다. 여기에 무엇을 찾고 있습니다 :

//Your function type 
delegate int GetEnumTypeUnderlyingIdFunc<T>(); 

//An instance of your function type 
GetEnumTypeUnderlyingIdFunc<int> myFunction =() => //some code to return an int ; 

이 또한 작동합니다.

//An instance of Func delegate 
Func<int> GetEnumTypeUnderlyingIdFunc =() => //some code to return an int; 
+0

을 지원하지 않기 때문에 그런 식으로 작동하지 않을 것입니다. 'GetEnumTypeUnderlyingIdFunc '대신'GetEnumTypeUnderlyingIdFunc '을 사용하면 잘 될지 모르겠습니다. – Dirk

+0

@Dirk 작동 중인지 확인할 수 있습니다. –

+0

것은'GetEnumTypeUnderlyingIdFunc '을 사용하여 원래 일반 메서드'GetEnumTypeUnderlyingId '을 전문화합니다. 이제는 'int'에만 유효합니다. – Dirk

0

또 다른 해결책은

public Func<int> GetTheFunc<T>(T val) 
{ 
    Func<int> func =() => (int)Enum.Parse(typeof(T),Enum.GetName(typeof(T),val)); 
    return func; 
} 

그런 다음

var func = GetTheFunc<_franchise>(_franchise.LoginDialog); 

//Now you can use the func, pass it around or whatever.. 
var intValue = func(); 
관련 문제