C#8.0でのswitch文での共通Interfaceへのキャスト

[code]

    Interface i = s switch { 0 => new A(), 1 => new B() }
    
[/code]

のように書きたいのですが、実際は

[code]

    Interface i = s switch { 0 => new A() as Interface, 1 => new B() as Interface }
    
[/code]

の様にインターフェースを明示してやる必要があります。（実際は片方で推論してくれる）  
これを上側のように暗黙的に型変換をする方法はあるのでしょうか？



[code]

    Interface i = s == 0 ? new A() : new B();
    
[/code]

が書けないのと同じ理由で現状書けません。一つの式は必ず一つだけ値を持つ必要があり、そのためには型が定まらなければならないためです。三項演算子であれば`true`側の式の型ですし、`switch`式も最初の型（この場合、`A`）となる仕様です。

次点で以下は書けるそうな気がしますがいかがでしょうか？ （試してません）

[code]

    var i = s switch { 0 => new A() as Interface, 1 => new B() };
    
[/code]

なお、[Target-typed switch
expression](https://github.com/dotnet/csharplang/blob/master/meetings/2019/LDM-2019-04-22.md#target-
typed-switch-expression)として議論されているようですが、`natural
type`に限られるため、やはり今回のようなことは出来なさそうです。



[code]

    Interface i = s == 0 ? new A() : new B();
    
[/code]

が書けないのと同じ理由で現状書けません。一つの式は必ず一つだけ値を持つ必要があり、そのためには型が定まらなければならないためです。三項演算子であれば`true`側の式の型ですし、`switch`式も最初の型（この場合、`A`）となる仕様です。

次点で以下は書けるそうな気がしますがいかがでしょうか？ （試してません）

[code]

    var i = s switch { 0 => new A() as Interface, 1 => new B() };
    
[/code]

なお、[Target-typed switch
expression](https://github.com/dotnet/csharplang/blob/master/meetings/2019/LDM-2019-04-22.md#target-
typed-switch-expression)として議論されているようですが、`natural
type`に限られるため、やはり今回のようなことは出来なさそうです。

