У меня есть класс, который выглядит примерно так:
public class MyClass {
public string id { get; set; }
public string Id { get; set; }
public string SomethingMore {get; set;}
}
Я не контролирую класс. Поэтому мне приходится мириться с тем фактом, что существуют id
(строчные буквы i) и Id
(прописные буквы I). Нравится мне это или нет, я не могу изменить это, поэтому этот ответ отвечает на мои вопросы, почему, но не отвечает на мои вопросы с практическими рекомендациями.
В моем дереве выражений у меня есть:
var newExpression = Expression.New(typeof(MyClass).GetConstructor(Type.EmptyTypes))
var propertyExpression = Expression.Property(newExpression, "Id");
Во второй строке выдается Ambiguous Match Exception
, потому что Expression.Property(..)
не учитывает регистр - например, Expression.Property(newExpression, "SomethingMore")
не не выдает исключение.
Какой тип работы вокруг вариантов у меня есть?
Следующий шаг в коде:
Expression.Assign(propertyExpression, Expression.Constant("someNewValue", typeof(string));
Мне не нужно присваивать значение свойству id
, и я знаю значение id
, которое является особенным , Однако мне нужно иметь возможность присвоить значение свойству Id
.
Полагаю, я мог бы создать производную версию моего MyClass
, которая не включает свойство id
, но Мне нужно сделать это во время выполнения. Если это решение, как это можно сделать? Или, может быть, есть гораздо лучшее решение?
Я не контролирую MyClass
. Я только знаю, что разработчик будет склонен определять и id
и Id
в своем классе.