关于反射的问题,哪位大哥帮忙下!!!

weizhuangwen 2012-07-24 01:00:30
国际惯例,先贴出代码!!!

ERMS.Package.MetadataID.M1
ERMS.Package.MetadataID.M2
ERMS.Package.MetadataID.M3
ERMS.Package.MetadataID.M4
ERMS.Package.MetadataID.M5
....//从M1一直到M88
ERMS.Package.MetadataID.M88

这个是一个DLL里面的一个类属性。。

现在问题来了。。我有一堆string Mx的变量,,,它们的数值都是等于(M1,M5,M9,M22,M46...)等等,现在我想通过这些变量的数值调用对应的ERMS.Package.MetadataID.M?? ,,,,请问一定要用如下的办法吗??


if(Mx=="M1")
ERMS.Package.MetadataID.M1;
if(Mx=="M2")
ERMS.Package.MetadataID.M2;
if(Mx=="M3")
ERMS.Package.MetadataID.M3;
if(Mx=="M4")
ERMS.Package.MetadataID.M4;
...//88次

能不能用个循环??听说有个“反射”的方法,但看了相关的资料,也不是很懂。怎么用?
...全文
266 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Anod 2012-07-24
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
Quote=引用 15 楼 的回复:]
是enum,如下:
namespace ERMS.Package
{
public enum MetadataID
{
...
....


引用 14 楼 的回复:

你看看MetadataID的定义是什么?class还是enum?
[/Quote]

那我想你的意思应该是这样:

C# code

s……
[/Quote]

名称 说明
Enum.Parse (Type, String) 将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。
Enum.Parse (Type, String, Boolean) 将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。一个参数指定该操作是否区分大小写。
由 .NET Compact Framework 支持。

weizhuangwen 2012-07-24
  • 打赏
  • 举报
回复
谢谢啊!!!是这样!就是这个意思!!代码可以顺利达到效果了!!!结贴了!!![Quote=引用 17 楼 的回复:]

Quote=引用 15 楼 的回复:]
是enum,如下:
namespace ERMS.Package
{
public enum MetadataID
{
...
....


引用 14 楼 的回复:

你看看MetadataID的定义是什么?class还是enum?
[/Quote]

那我想你的意思应该是这样:
C# code

st……
[/Quote]
ParanoidKing 2012-07-24
  • 打赏
  • 举报
回复
Quote=引用 15 楼 的回复:]
是enum,如下:
namespace ERMS.Package
{
public enum MetadataID
{
...
....


引用 14 楼 的回复:

你看看MetadataID的定义是什么?class还是enum?
[/Quote]

那我想你的意思应该是这样:

string Mx = "M15";
ERMS.Package.MetadataID metadataID = (ERMS.Package.MetadataID)Enum.Parse(typeof(ERMS.Package.MetadataID), Mx);
entity.Content.Add(metadataID, "001");
weizhuangwen 2012-07-24
  • 打赏
  • 举报
回复
大哥,我已经来到这步了,如下:
string xm = "M12";
foreach(Type t in types)
{
if (t.FullName == "ERMS.Package.MetadataID")
{
System.Windows.Forms.MessageBox.Show("找到了");

t.GetProperty("ERMS.Package.MetadataID." + xm.ToString());
}
}


然后怎么样做呢?
[Quote=引用 2 楼 的回复:]

int i = 1;
xxx.GetProperty("ERMS.Package.MetadataID.M"+i.ToString()); 这样???
[/Quote]
weizhuangwen 2012-07-24
  • 打赏
  • 举报
回复
是enum,如下:
namespace ERMS.Package
{
public enum MetadataID
{
...
....

[Quote=引用 14 楼 的回复:]

你看看MetadataID的定义是什么?class还是enum?
[/Quote]
ParanoidKing 2012-07-24
  • 打赏
  • 举报
回复
你看看MetadataID的定义是什么?class还是enum?
weizhuangwen 2012-07-24
  • 打赏
  • 举报
回复
大哥,如果我要用在如下的代码里,应该怎么用??
entity.Content.Add(ERMS.Package.MetadataID.M10, "A1.1");
entity.Content.Add(ERMS.Package.MetadataID.M15, "001");
entity.Content.Add(ERMS.Package.MetadataID.M17, "001");

已经得到了TYPE了,代码如下:
foreach(Type t in types)
{
if (t.FullName == "ERMS.Package.MetadataID")
{
System.Windows.Forms.MessageBox.Show("找到了");

t.GetProperty("ERMS.Package.MetadataID." + xm.ToString());
}
}
[Quote=引用 2 楼 的回复:]

int i = 1;
xxx.GetProperty("ERMS.Package.MetadataID.M"+i.ToString()); 这样???
[/Quote]
weizhuangwen 2012-07-24
  • 打赏
  • 举报
回复
这个具体也说不清楚,是别人写的,是一个类,里面有很多属性集合,里面的代码是这样的:
M13 = 13,
[Description("类别号")]
M14 = 14,
[Description("室编案卷号")]
M15 = 15,
[Description("馆编案卷号")]
M16 = 16,
[Description("室编件号")]
M17 = 17,
[Description("馆编件号")][Quote=引用 10 楼 的回复:]

ERMS.Package.MetadataID是什么?按lz的写法看上去像个枚举。
[/Quote]
weizhuangwen 2012-07-24
  • 打赏
  • 举报
回复
大哥,已经获得了XXX.GetProperties();的方法组了。

然后怎么用呢??


[Quote=引用 7 楼 的回复:]

首先获得程序集Assembly
然后获得Type
调用它的 GetProperty? GetProperties 方法获得属性数组
[/Quote]
ParanoidKing 2012-07-24
  • 打赏
  • 举报
回复
ERMS.Package.MetadataID是什么?按lz的写法看上去像个枚举。
weizhuangwen 2012-07-24
  • 打赏
  • 举报
回复
entity.Content.Add(ERMS.Package.MetadataID.M15, "001");

entity.Content.Add() 这个是填充一个XML的方法的,是我们内部的一个DLL。

填充要有两个数值,"001"是一个数值,这个不重要的。



然后ERMS.Package.MetadataID.M15 是一个类中的属性,里面的东西如下:
M13 = 13,
[Description("类别号")]
M14 = 14,
[Description("室编案卷号")]
M15 = 15,
[Description("馆编案卷号")]
M16 = 16,
[Description("室编件号")]
M17 = 17,
[Description("馆编件号")]

我也不知道算是赋值还是取值,就是想这么用

entity.Content.Add(ERMS.Package.MetadataID.M15, "001");//其中M15可以根据变量数值给定,比如我的变量==M16,那么就调用M16entity.Content.Add(ERMS.Package.MetadataID.M16, "001");
[Quote=引用 8 楼 的回复:]

引用 4 楼 的回复:
大哥!!!炸出了个错误!!代码如下:

C# code

string Mx1 = "M12";
ERMS.Package.MetadataID Mx=new ERMS.Package.MetadataID();
typeof(ERMS.Package.MetadataID).GetProperty(Mx1).GetVal……


entity是什么……
[/Quote]
ParanoidKing 2012-07-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
大哥!!!炸出了个错误!!代码如下:

C# code

string Mx1 = "M12";
ERMS.Package.MetadataID Mx=new ERMS.Package.MetadataID();
typeof(ERMS.Package.MetadataID).GetProperty(Mx1).GetVal……
[/Quote]

entity是什么?entity.Content又是什么?Mxx是静态还是非静态?你是要给Mxx赋值还是要取Mxx的值?
GodDices 2012-07-24
  • 打赏
  • 举报
回复
首先获得程序集Assembly
然后获得Type
调用它的 GetProperty? GetProperties 方法获得属性数组
weizhuangwen 2012-07-24
  • 打赏
  • 举报
回复
这个XXX.是什么方法??怎么用的?在哪里类里??[Quote=引用 1 楼 的回复:]

貌似有一个F打头的,但不是for的循环
[/Quote]
weizhuangwen 2012-07-24
  • 打赏
  • 举报
回复
我点“引用”点错了!!详细看楼上!![Quote=引用 3 楼 的回复:]

(typeof(ERMS.Package.MetadataID).GetProperty(Mx).GetValue(obj, null))
obj是ERMS.Package.MetadataID的实例,如果Mx是静态方法obj可以写null
[/Quote]
weizhuangwen 2012-07-24
  • 打赏
  • 举报
回复
大哥!!!炸出了个错误!!代码如下:
string Mx1 = "M12";
ERMS.Package.MetadataID Mx=new ERMS.Package.MetadataID();
typeof(ERMS.Package.MetadataID).GetProperty(Mx1).GetValue(Mx, null);
entity.Content.Add(ERMS.Package.MetadataID.M7, Guid.NewGuid().ToString("N"));
entity.Content.Add(Mx, "12345678901111111111111111");
entity.Content.Add(ERMS.Package.MetadataID.M13, "2012");


错误是:未将对象引用设置到对象的实例。[Quote=引用 2 楼 的回复:]

int i = 1;
xxx.GetProperty("ERMS.Package.MetadataID.M"+i.ToString()); 这样???
[/Quote]
ParanoidKing 2012-07-24
  • 打赏
  • 举报
回复
(typeof(ERMS.Package.MetadataID).GetProperty(Mx).GetValue(obj, null))
obj是ERMS.Package.MetadataID的实例,如果Mx是静态方法obj可以写null
bdmh 2012-07-24
  • 打赏
  • 举报
回复
int i = 1;
xxx.GetProperty("ERMS.Package.MetadataID.M"+i.ToString()); 这样???
青天流雲 2012-07-24
  • 打赏
  • 举报
回复
貌似有一个F打头的,但不是for的循环

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧