Is there a way to access member by a string (which is the name)?
E.g. if static code is:
classA.x = someFunction(classB.y);
but I only have two strings:
string x = "x";
string y = "y";
I know in JavaScript you can simply do:
classA[x] = someFunction(classB[y]);
But how to do it in C#?
Also, is it possible to define name by string?
For example:
string x = "xxx";
class{
bool x {get;set} => means bool xxx {get;set}, since x is a string
}
UPDATE, to tvanfosson, I cannot get it working, it is:
public class classA
{
public string A { get; set; }
}
public class classB
{
public int B { get; set; }
}
var propertyB = classB.GetType().GetProperty("B");
var propertyA = classA.GetType().GetProperty("A");
propertyA.SetValue( classA, someFunction( propertyB.GetValue(classB, null) as string ), null );
You need to use reflection.
where
Foo
is the type of the parameter thatsomeFunction
requires. Note that ifsomeFunction
takes anobject
you don't need the cast. If the type is a value type then you'll need to use(Foo)propertyB.GetValue(classB,null)
to cast it instead.I'm assuming that we are working with properties, not fields. If that's not the case then you can change to use the methods for fields instead of properties, but you probably should switch to using properties instead as fields shouldn't typically be public.
If the types aren't compatible, i.e.,
someFunction
doesn't return the type ofA
's property or it's not assignable, then you'll need to do a conversion to the proper type. Similarly if the type of B isn't compatible with the parameter of the function, you'll need to do the same thing.