如何在C中通过字符串访问类成员?
【腾讯云】亏本大甩卖,服务器4核16G 1年370元(带宽12M,系统盘120GB SSD盘,月流量2000GB)!!!!!!
云产品 配置 价格
服务器 1核2G,带宽5M,系统盘50GB SSD盘,月流量500GB 38元/年
MySQL 1核1G 19元/年
服务器 16核32G,带宽18M,系统盘250GB SSD盘,月流量5000GB 1197元/年
点我进入腾讯云,查看更多详情

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

#0

You need to use reflection.

 var propertyB = classB.GetType().GetProperty(y);
 var propertyA = classA.GetType().GetProperty(x);

 propertyA.SetValue( classA, someFunction( propertyB.GetValue(classB,null) as Foo ), null );

where Foo is the type of the parameter that someFunction requires. Note that if someFunction takes an object 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 of A'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.

 propetyA.SetValue( classA, someFunction(Convert.ToInt32( propertyB.GetValue(classB,null))).ToString() );

推荐文章

路由WCF数据服务

路由WCF数据服务

推荐文章

重写HasValue到??操作员

重写HasValue到??操作员

推荐文章

为什么begin/rescue/else在1.9.2和1.8.7中的行为不同

为什么begin/rescue/else在1.9.2和1.8.7中的行为不同

推荐文章

临时桌子还是永久桌子?

临时桌子还是永久桌子?

推荐文章

无法连接到SQL Express“错误:26查找指定的服务器/实例时出错)

无法连接到SQL Express“错误:26查找指定的服务器/实例时出错)

推荐文章

USB事件处理

USB事件处理

推荐文章

如何在JOptionPane上使用“doClick()”?

如何在JOptionPane上使用“doClick()”?

推荐文章

CSS3 Ken Burn effect当页面滚动时暂停,然后再次播放平滑动画

CSS3 Ken Burn effect当页面滚动时暂停,然后再次播放平滑动画

推荐文章

Javascript自定义验证

Javascript自定义验证

推荐文章

(Py)Qt中的图像列表

(Py)Qt中的图像列表

推荐文章

从PDF中删除图像

从PDF中删除图像

推荐文章

如何在三列中打印数组的值?

如何在三列中打印数组的值?

推荐文章

子域的htaccess

子域的htaccess

推荐文章

T-SQL-将二进制数据转换为Base64(或其他字符串表示形式)

T-SQL-将二进制数据转换为Base64(或其他字符串表示形式)

推荐文章

如何在没有应答确认的情况下杀死emacs中的缓冲区?

如何在没有应答确认的情况下杀死emacs中的缓冲区?

推荐文章

如何通过编程将pdf文件从android发送到wifi打印机

如何通过编程将pdf文件从android发送到wifi打印机