У меня действительно странная проблема. Приведенный ниже код работает нормально, если я создаю новое консольное приложение и вставляю код, но если я создаю новое консольное приложение в своем решении и вставляю точно такой же код, я получаю исключение связывателя во время выполнения, которое в динамике не содержит определения для Привет. В моем существующем решении странные вещи, код никогда не входит в TryGetMember ().
Это действительно беспокоит меня, и решение слишком велико, чтобы перейти к новому решению, и я не уверен, что это будет исправлено. В консольном приложении, которое не работает, все ссылки такие же, как и в том, который работает. единственная разница в том, что это не в решении. В целом решение работает аналогично с динамикой - забавно то, что это сработало, но внезапно остановилось, поэтому я создаю эту простую программу для проверки теории.
Редактировать: приложение, которое не работает в решении, работает нормально, если я не присоединяю отладчик, т.е. Ctrl + F5.
Есть идеи?
using System.Collections;
using System.Collections.Generic;
using System.Dynamic;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
IDictionary<string, object> dictionary = new Dictionary<string, object>();
dictionary["hello"] = "world";
dynamic d = new MyDynamicModel(dictionary);
var a = d.hello;
}
}
public class MyDynamicModel : DynamicObject
{
private IDictionary<string, object> Values { get; set; }
public MyDynamicModel(IDictionary<string, object> dict)
{
Values = dict;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
return Values.TryGetValue(binder.Name, out result);
}
}
}