c# - termodinamicas - un recipiente rigido contiene 2 kg de refrigerante 134a
Implementación de.net DynamicObject que devuelve nulo para las propiedades faltantes en lugar de una excepción RunTimeBinderException (1)
Me gustaría poder hacer algo como lo siguiente:
dynamic a = new ExpandoObject();
Console.WriteLine(a.SomeProperty ?? "No such member");
pero eso arroja
RunTimeBinderException: ''System.Dynamic.ExpandoObject'' does not contain a definition for ''Throw''
¿Conoce una implementación de DynamicObject que devuelva nulo a las definiciones que faltan, o un tutorial sobre cómo crear una? ¡Muchas gracias!
¿Algo como esto?
using System;
using System.Collections.Generic;
using System.Dynamic;
public class NullingExpandoObject : DynamicObject
{
private readonly Dictionary<string, object> values
= new Dictionary<string, object>();
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
// We don''t care about the return value...
values.TryGetValue(binder.Name, out result);
return true;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
values[binder.Name] = value;
return true;
}
}
class Test
{
static void Main()
{
dynamic x = new NullingExpandoObject();
x.Foo = "Hello";
Console.WriteLine(x.Foo ?? "Default"); // Prints Hello
Console.WriteLine(x.Bar ?? "Default"); // Prints Default
}
}
Espero que el ExpandoObject
real sea bastante más sofisticado que esto, pero si esto es todo lo que necesita ...