If you have a property defined like this:
private DateTime modifiedOn; public DateTime ModifiedOn { get { return modifiedOn; } }
How do you set it to a certain value with Reflection?
I've tried both:
dto.GetType().GetProperty("ModifiedOn").SetValue(dto, modifiedOn, null);
and
dto.GetType().GetProperty("modifiedOn").SetValue(dto, modifiedOn, null);
but without any success. Sorry if this is a stupid question but it's the first time I'm using Reflection with C#.NET.
That has no setter; you'd need:
public DateTime ModifiedOn { get { return modifiedOn; } private set {modifiedOn = value;} }
(you might have to use BindingFlags
- I'll try in a moment)
Without a setter, you'd have to rely on patterns / field names (which is brittle), or parse the IL (very hard).
The following works fine:
using System; class Test { private DateTime modifiedOn; public DateTime ModifiedOn { get { return modifiedOn; } private set { modifiedOn = value; } } } static class Program { static void Main() { Test p = new Test(); typeof(Test).GetProperty("ModifiedOn").SetValue( p, DateTime.Today, null); Console.WriteLine(p.ModifiedOn); } }
It also works with an auto-implemented property:
public DateTime ModifiedOn { get; private set; }
(where relying on the field-name would break horribly)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With