J'ai une "norme" dictionnaire dynamique de type classe en C# -
class Bucket : DynamicObject
{
readonly Dictionary<string, object> m_dict = new Dictionary<string, object>();
public override bool TrySetMember(SetMemberBinder binder, object value)
{
m_dict[binder.Name] = value;
return true;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
return m_dict.TryGetValue(binder.Name, out result);
}
}
Maintenant je l'appelle, comme suit:
static void Main(string[] args)
{
dynamic d = new Bucket();
d.Name = "Orion"; // 2 RuntimeBinderExceptions
Console.WriteLine(d.Name); // 2 RuntimeBinderExceptions
}
L'application fait ce que vous attendez, mais la sortie de débogage ressemble à ceci:
Une exception de première chance de type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' s'est produite dans Microsoft.CSharp.dll Une exception de première chance de type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' s'est produite dans Microsoft.CSharp.dll 'ScratchConsoleApplication.vshost.exe' (Géré (v4.0.30319)): Chargé 'De Manière Anonyme Hébergé DynamicMethods Assemblée" Une exception de première chance de type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' s'est produite dans Microsoft.CSharp.dll Une exception de première chance de type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' s'est produite dans Microsoft.CSharp.dll
Toute tentative d'accès à un membre dynamique semble sortie d'un RuntimeBinderException
pour les journaux de débogage. Même si j'ai conscience que la première chance exceptions ne sont pas un problème en soi, cela ne cause de certains problèmes pour moi:
J'ai souvent le débogueur réglé sur "arrêt sur les exceptions, comme je suis en train d'écrire des applications WPF, et sinon toutes les exceptions fin de compte converti en
DispatcherUnhandledException
, et toutes les informations que vous voulez, c'est perdu. WPF suce comme ça.Dès que j'ai touché tout le code qui utilise l'
dynamic
, la sortie de débogage journal est assez inutile. Tous les utiles tracer des lignes que je me soucie d'obtenir cachés parmi tous les inutilesRuntimeBinderException
s
Est il possible que je peux désactiver cette fonction, ou est l' RuntimeBinder
, malheureusement, juste construit comme ça?
Merci, Orion