У нас есть свойство типа long?
, которое заполняется с помощью int
.
Это отлично работает, когда я просто устанавливаю свойство непосредственно obj.Value = v;
, но когда я пытаюсь установить свойство через отражение info.SetValue(obj, v, null);
, это дает мне следующее исключение:
Объект типа 'System.Int32' не может быть преобразован в тип 'System.Nullable`1 [System.Int64]'.
Это упрощенный сценарий:
class TestClass
{
public long? Value { get; set; }
}
[TestMethod]
public void TestMethod2()
{
TestClass obj = new TestClass();
Type t = obj.GetType();
PropertyInfo info = t.GetProperty("Value");
int v = 1;
// This works
obj.Value = v;
// This does not work
info.SetValue(obj, v, null);
}
Почему он не работает при настройке свойства через reflection
, когда он работает при настройке свойства напрямую?