私はC#初心者ですが、問題が発生しました。三項演算子(? :
)を扱う場合、C#とJavaには違いがあります。
次のコードセグメントで、4行目が機能しないのはなぜですか?コンパイラはのエラーメッセージを表示しますthere is no implicit conversion between 'int' and 'string'
。5行目も機能しません。どちらList
もオブジェクトですよね。
int two = 2;
double six = 6.0;
Write(two > six ? two : six); //param: double
Write(two > six ? two : "6"); //param: not object
Write(two > six ? new List<int>() : new List<string>()); //param: not object
ただし、同じコードがJavaで機能します。
int two = 2;
double six = 6.0;
System.out.println(two > six ? two : six); //param: double
System.out.println(two > six ? two : "6"); //param: Object
System.out.println(two > six ? new ArrayList<Integer>()
: new ArrayList<String>()); //param: Object
C#のどの言語機能が不足していますか?もしあれば、なぜ追加されないのですか?
int
はオブジェクトではないためです。それはプリミティブです。
ArrayList<String>
とArrayList<Integer>
ばかりになるArrayList
バイトコードに。これは、実行時にそれらがまったく同じ型であるように見えることを意味します。どうやらC#ではそれらは異なるタイプです。