Nullable 매개 변수가있는 일반 foo 메서드를 호출 할 수 있기를 원합니다. Foo 메서드의 본문에서 Foo()를 호출하면 재귀 적으로 실행되어 스택 오버플로 (.com없이)가 발생합니다. if 문에서 호출에 런타임 유형으로 올바른 오버로드를 호출 할 수있는 방법이 있습니까?nullable param call 콘크리트 유형을 사용하는 일반 오버로드 된 메서드
나는 이름을 변경하면 그것을 이해할 수 있으며 재귀가 발생하는 이유를 알고 있지만 이것을 쓰는 다른 방법을 알지 못합니다.
감사합니다.
class Program {
static void Main(string[] args) {
int? x = 5;
int y = 10;
Foo(x, y);
}
static void Foo<T>(Nullable<T> arg, T defaultValue) where T : struct {
if (arg.HasValue)
Foo(arg.Value, defaultValue);
}
static void Foo(int arg, int defaultValue) {
Console.WriteLine(string.Format("I'm an int arg={0}, default={1]}", arg, defaultValue));
}
static void Foo(string arg, int defaultValue) {
Console.WriteLine(string.Format("I'm an string arg={0}, default={1]}", arg, defaultValue));
}
static void Foo(bool arg, int defaultValue) {
Console.WriteLine(string.Format("I'm an double arg={0}, default={1]}", arg, defaultValue));
}
}
어디에서'double? '을 기대합니까? –
Foo() – logicnp