J'ai donc cherché dans les autres questions relatives aux exceptions NullReferenceException et aux liaisons d'exécution sur SO, mais je n'ai pas trouvé de réponse à cette question.
En gros, j'ai le code ci-dessous. La méthode ManipulateConcrete
renvoie False, comme vous vous y attendez, mais la méthode Manipulate
jette
Une exception 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' s'est produite dans System.Core.dll
Informations complémentaires : Impossible d'effectuer une liaison d'exécution sur une null
Code :
class Program
{
static void Main(string[] args)
{
var myClassInstance = new MyClass() { MyGuid = null };
ManipulateConcrete(myClassInstance);
Manipulate(myClassInstance);
Console.ReadLine();
}
static void Manipulate(dynamic myClass)
{
Console.WriteLine(myClass.MyGuid.HasValue);
}
static void ManipulateConcrete(MyClass myClass)
{
Console.WriteLine(myClass.MyGuid.HasValue);
}
}
class MyClass
{
public Guid? MyGuid;
}
Est-ce que je rate quelque chose de vraiment évident ? Ou s'agit-il d'une limitation de la dynamique ? Si c'est le cas, quelqu'un connaît-il la raison sous-jacente de ce phénomène ?