Simple example, I have a Cat
object with a Name
property.
I have a class with a method called PrintName<T>(T objectToPrint)
I can't do Console.WriteLine(objectToPrint.Name)
because it's type T
.
So can I pass in the parameter as a linq expression that gets the name? Something like;
Cat c = new Cat("Bernard the Cat");
PrintName(cat, parameter: c => c.Name);
Then PrintName can just do
Console.WriteLine(cat.RunLinq(parameter));
Well, you could use an Interface, but if the property can change, you could do.
First solution : if you need the property's name
PrintName<T>(T objectToPrint, Expression<Func<T, object>> property)
usage
PrintName(cat, c=> c.Name)
Then to get the "name" of the property, something like that.
var name = (property.Body as MemberExpression).Member.Name
Second solution : if you need the property's value
if you want the value of the property, use a Func<T, object> func
parameter
// object if you don't know the type of the property,
// you can limit it to string if needed, of course
PrintName<T>(T objectToPrint, Func<T, object> func)
usage
PrintName(cat, c => c.Name)
then
var value = func(cat)
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