是否有通过字符串(即名称)访问成员的方法?
例如,如果静态代码为:
classA.x = someFunction(classB.y);
但我只有两个字符串:
string x = "x";
string y = "y";
我知道在JavaScript中你可以简单地做:
classA[x] = someFunction(classB[y]);
但是如何在C#中实现呢?
另外,是否可以通过字符串定义名称?
例如:
string x = "xxx";
class{
bool x {get;set} => means bool xxx {get;set}, since x is a string
}
UPDATE,对于tvanfosson,我无法让它工作,它是:
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 );
您需要使用反射。
var propertyB = classB.GetType().GetProperty(y);
var propertyA = classA.GetType().GetProperty(x);
propertyA.SetValue( classA, someFunction( propertyB.GetValue(classB,null) as Foo ), null );
其中CCD_ 1是CCD_。请注意,如果someFunction
采用object
,则不需要强制转换。如果类型是值类型,则需要使用(Foo)propertyB.GetValue(classB,null)
来强制转换它。
我假设我们使用的是属性,而不是字段。如果不是这样,那么您可以更改为使用字段的方法而不是属性,但您可能应该改用属性,因为字段通常不应该是公共的
如果类型不兼容,即someFunction
不返回A
属性的类型或不可赋值,则需要转换为正确的类型。类似地,如果B的类型与函数的参数不兼容,则需要执行相同的操作。
propetyA.SetValue( classA, someFunction(Convert.ToInt32( propertyB.GetValue(classB,null))).ToString() );