c#编译器是否会执行多个隐式转换以从一种类型转换到另一种类型?

RCI*_*CIX 4 c# casting implicit-cast

假设您有自己的类如下:

public sealed class StringToInt { 
    private string _myString; 
    private StringToInt(string value) 
    { 
        _myString = value; 
    } public static implicit operator int(StringToInt obj) 
    { 
        return Convert.ToInt32(obj._myString); 
    } 
    public static implicit operator string(StringToInt obj) 
    { 
        return obj._myString; 
    } 
    public static implicit operator StringToInt(string obj) 
    { 
        return new StringToInt(obj); 
    } 
    public static implicit operator StringToInt(int obj) 
    { 
        return new StringToInt(obj.ToString()); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

那么您是否可以编写如下代码:

MyClass.SomeMethodThatOnlyTakesAnInt(aString);
Run Code Online (Sandbox Code Playgroud)

没有它声明没有从字符串到int的隐式转换?

[是的,我可以亲自测试一下,但我想我会把它放在那里,看看所有大师们都要说的话]

shf*_*301 10

没有C#不会调用多个用户定义的隐式转换.从C#规范第6.4.3节:

评估用户定义的转换从不涉及多个用户定义或提升的转换运算符.换句话说,从类型S到类型T的转换将永远不会首先执行从S到X的用户定义转换,然后执行从X到T的用户定义转换.

  • “通过具有瞬态类型来作弊” ..就像在很好的C ++中一样。有时我真的很想念那个 (2认同)