이렇게하려면 Expression Tree를 사용할 수 있습니다. 도우미, 정적 클래스
static class NumericHelper<T>
{
public static T Zero { get; private set; }
public static T One { get; private set; }
static NumericHelper()
{
Zero = default(T);
One = Expression.Lambda<Func<T>>(
Expression.Convert(
Expression.Constant(1),
typeof(T)
)
).Compile()();
}
}
그것은 런타임에 (T)1
캐스트를 생성을 고려하고 One
속성에 결과를 할당합니다. 정적 생성자는 올바르게 입력 된 1
값을 생성하는 데 필요한 코드가 한번만 실행되므로 T
마다 한 번만 실행됩니다. 당신이 (T)1
변환을 지원하지 않는 유형 T
로 전화를하려고하면
public static bool IsPercentage<T>(T value) where T : IComparable
{
return value.CompareTo(NumericHelper<T>.Zero) >= 0 && value.CompareTo(NumericHelper<T>.One) <= 0;
}
년 OFC는 실패합니다.
어떤 종류의이 작업을 예상 하는가? 플로트, 더블, 10 진수 및 ...? –
@ThomasW. 가급적 모든 숫자 유형 – ConditionRacer
@Servy 나는 당신이 * duplicate *로 설정 한 질문과 아무런 관련이 없다고 생각합니다. OP는'T'를'int' 만 받아들이는 메소드를 필요로하지 않습니다 (하나의 타입을위한 일반적인 메소드를 가지고있는 점은 무엇입니까?). 'T == int'에는'0' /'1','T == double'에는'0d' /'1d' 등 적절하게 타입 된'0'과'1' 값을 얻기 위해서는'CompareTo'가 필요합니다. – MarcinJuraszek