如何在C#中通过字符串访问类成员



是否有通过字符串(即名称)访问成员的方法?

例如,如果静态代码为:

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() );

相关内容

  • 没有找到相关文章

最新更新