奇怪的StackOverflow异常

J. *_*Doe 2 c# type-conversion

我有以下代码:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine((Program)3);

        Console.WriteLine("Execution complete.");
        Console.Read();
    }

    public static implicit operator Program(int asd)
    { return 10; }
}
Run Code Online (Sandbox Code Playgroud)

它在最后一行({ return 10; })引发StackOverflow异常。我不知道为什么,因为堆栈上应该有足够的空间来存放所有内容。

我正在学习operator关键字和隐式/显式转换,因此我制作了这个小例子来测试一些内容。

Swe*_*per 8

堆栈溢出是由以下方法导致的:

public static implicit operator Program(int asd)
{ return 10; }
Run Code Online (Sandbox Code Playgroud)

为什么此方法会无限调用自身?好的,此方法定义了从int到的隐式转换Program,因此您应该返回Program给定被int调用的实例asd。但是,您返回int。通常,这会失败,但是由于您定义了从int到的隐式转换Program,编译器会“很好,就可以了”。

但在运行时,它会尝试你转换10到一个Program再次调用隐式转换方法。隐式转换方法返回a 10,运行时会尝试将其Program再次隐式转换为,因此它再次调用该方法...

我真的看不到您要在这里做什么,所以我不知道该问题的解决方案。