많은 행동의 C#을 사양에 가까운해야 ExpressionTrees 컴파일러처럼 보이지만 C#을 달리 어떤 enum-type
에 decimal
의 변환에 대한 지원이 없습니다 :ExpressionTrees 버그입니까? # 2
using System;
using System.Linq.Expressions;
class Program
{
static void Main()
{
Func<decimal, ConsoleColor> converter1 = x => (ConsoleColor) x;
ConsoleColor c1 = converter1(7m); // fine
Expression<Func<decimal, ConsoleColor>> expr = x => (ConsoleColor) x;
// System.InvalidOperationException was unhandled
// No coercion operator is defined between types
// 'System.Decimal' and 'System.ConsoleColor'.
Func<decimal, ConsoleColor> converter2 = expr.Compile();
ConsoleColor c2 = converter2(7m);
}
}
다른 거의 사용되지 않는 C#을 명시 적 변환, double -> enum-type
을 등 C#에서 설명한대로 작동하지만 decimal -> enum-type
은 작동하지 않습니다. 이거 버그 야?
나는 C# 언어를 만드는 데있어 인간이 해를 입었다는 것을 알지 못했다. –
"10 진수 변환은 런타임에 사용자 정의 변환으로 구현되지만 컴파일러에서 기본 제공 변환으로 처리됩니다." , 왜 이렇게 했습니까? – Brian
@Brian : 표현을 바꾸는 변환을 할 때, int를 double로 말할 때, 정확하게 그 변환을하는 일리노이 명령어가 있습니다. 십진법을 두 배로 할 때 실제로 변환을 수행 할 메소드를 호출하는 코드를 생성합니다. 십진수에 대한 내장 CLR 변환 명령은 없습니다. 그러나 * 언어 * 관점에서 우리는 십진수 변환이 내장형 언어 변환이되기를 원합니다. 우리는 내장형 및 사용자 제공 형 변환에 대해 다른 규칙을 가지고 있습니다. 그래서 우리는 소수의 장면 뒤에 무엇이 일어나고 있는지를 숨기기 위해 특별한 풍경을 만들어야합니다. –