에서 값 유형을 사용하는 방법은 다음과 같은 코드를 가지고 :제네릭
public class Class1
{
void ValueSpecific(string arg)
{
// do string stuff
}
void ValueSpecific(int arg)
{
// do int stuff
}
void ValueSpecific(float arg)
{
// do float stuff
}
void ValueGeneric(string arg)
{
// do stuff
ValueSpecific(arg);
// do more stuff
}
void ValueGeneric(int arg)
{
// do stuff
ValueSpecific(arg);
// do more stuff
}
void ValueGeneric(float arg)
{
// do stuff
ValueSpecific(arg);
// do more stuff
}
void Main(string s, int i, float f)
{
ValueGeneric(s);
ValueGeneric(i);
ValueGeneric(f);
}
}
이 작동하지만 ValueGeneric의 세 가지 오버로드의 신체의가 동일합니다. 내가 좋아하는 뭔가 보일 것 한 가지 방법으로 그들을 아말감 할 :
void ValueGeneric<T>(T arg) where T: string, float, int
{
// do stuff
ValueSpecific(arg);
// do more stuff
}
을하지만, 물론, 유효 C#을하지 않습니다.
void ValueGeneric(object arg)
{
// Do stuff
if (arg is int)
{
ValueSpecific((int)arg);
}
else if (arg is string)
{
ValueSpecific((string)arg);
}
else if (arg is float)
{
ValueSpecific((float)arg);
}
else
{
Debug.Assert(false, "Invalid type)
}
// Do more stuff
}
그러나 이것은 매우 우아 보인다 내가 가지고 올 수있는 최선이다. 나는 어떤 제안을 주셔서 감사합니다. (모든 솔루션에 관심이있는 반면, .NET3.5에서 지원하는 솔루션이 가장 좋을 것입니다.
이 작업을 원한다면 리플렉션을 사용해야합니다. –
확장 방법은 어떨까요? –
@JeffMercado가 맞습니다. 우아하게 보이기 위해서는 Reflection을 사용해야합니다. – pikzen