В какой-то момент игрался с dynamic и приведением типов в C# 4.0. Ну и получился примерно такой код.
По природе, такой код не должен скомпилироваться, т.к не существуетс неявного преобразования из dynamic в String.
Вобщем-то этот код и не компилируется, правда по причине Internal Compiler Error :-).
Забавно было увидеть, т.к ни разу еще не видел как падает компилятор.
Компитентные источники сообщили, что во внутренних билдах(которые не доступны широкой публике) этот баг исправлен.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Sample.Inner
{
public class C
{
public static void Test()
{
dynamic d = "Ooops...";
Print(d);
}
public static void Print(String p)
{
Console.WriteLine(p);
}
}
}
namespace Sample
{
class Program
{
static void Main(string[] args)
{
Sample.Inner.C.Test();
}
}
}
Можно еще отметить следующий нюанс - если изменить область видимости метода Print,
таким образом:
private static void Print(String p)
то компилятор справедливо выдаст нормальную ошибку с описанием причины.