54619

[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]

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


CC BY-SA 4.0
2019-04-30T18:39:40.860
54613
2019-04-30T21:38:37.253
2019-04-30T19:58:24.183
29826
34135
question
c#
C#8.0でのswitch文での共通Interfaceへのキャスト

[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`に限られるため、やはり今回のようなことは出来なさそうです。


CC BY-SA 4.0
2019-04-30T21:38:37.253
54619
2019-04-30T21:38:37.253
4236
54613
answer