3

特定のプロパティの私のプロジェクトでは、フォーム (x=>x.property) の式は、次のように実行時に (x=>Convert(x.property)) として出力されます。

ここに画像の説明を入力

プロパティのタイプによって異なりますが、double と DateTime が原因のようです。文字列プロパティに対しては正常に機能します (たとえば、Speed と ForeColour は両方とも文字列です)。

なんでこんなに出てくるの?

4

1 に答える 1

10

doubleおよびDateTimeは値型です。コンパイラはExpression.Convert、基本的にボックス化操作を表すために使用しています。

stringはすでに参照型であるため、変換は必要ありません。

通常のコードでも同じことがわかります。

double d = 0.5;
string s = "hello";

object o1 = d;
object o2 = s;

... にコンパイルされます。

// d = 0.5
IL_0001:  ldc.r8     0.5
IL_000a:  stloc.0

// s = "hello"
IL_000b:  ldstr      "hello"
IL_0010:  stloc.1

// o1 = d - boxing!
IL_0011:  ldloc.0
IL_0012:  box        [mscorlib]System.Double
IL_0017:  stloc.2

// o2 = s - no boxing required!
IL_0018:  ldloc.1
IL_0019:  stloc.3
于 2013-02-25T22:33:49.417 に答える