string m_sName = "m_sName"; [XmlAttribute("sName")] public string Name { get { return sName ; } set { sName = value; } }
class Example { public int m_iHeight; public int m_iWidth; string GetString() { System.Reflection.FieldInfo[] fields = typeof(this).GetFields(); StringBuilder builder = new StringBuilder(); foreach(System.Reflection.FieldInfo info in fields) { builder.AppendLine(typeof(this).GetField(info.Name).GetValue(this).ToString()); } return builder.ToString(); } }应该会得到你想要的字符串。格式上自己再改改。 string GetName(int height) { this.GetType().GetField() } this.GetType().GetField(str).GetValue(this).ToString());
例如m_iHeight = 4;
m_iHeight.ToString()应该得到了"4"而不是"m_iHeight"
博客空间:http://blog.csdn.net/lovingkiss
资源下载:http://download.csdn.net/user/lovingkiss
Email:loving-kiss@163.com
本人说明:<我的帖子我做主,结贴率保持100%>
优惠接单开发,信誉保证,Q64180940(请清楚注明业务还是技术咨询)
==================================================================
对应的xml element的名称采用变量的名称的字符串
我希望最好是能有一个函数来取得,例如:
String name = GetName(m_iHeight);
不知“反射“能否达到这样的效果?
对应的xml element的名称采用变量的名称的字符串
========================
我晕 强沙发强快了 刚才没领会楼主意思你要实现这种功能 序列化就可以吧 对应一些变量可以设定名称的 ,其实用的也是反射
保存为xml的好处就是其他程序也可以读取,并且和程序的版本基本无关
所以我不采用序列化~反射的GetMembers和GetType().GetFileds()可以得到类中的变量的名称
是一个数组,但我不知道如何将其一一对应上去~
如果是类变量可以用反射============================================
请问这种情况下,反射具体如何使用?
例如我现在要得到m_iHeight的对应字符串"m_iHeight"
谢谢
System.Reflection.MemberInfoCollection mis = t.GetMembers();
我现在需要的是GetMembers()之后的操作
例如我现在要得到m_iHeight的对应字符串"m_iHeight"
大概需要一个这样的函数
String name = GetName(m_iHeight);
请问如何操作?
{
string strname = mi.Name;
}
但是如何对应取到指定变量的名称:
/*************************************************
得到m_iHeight的对应字符串"m_iHeight"
可能需要一个这样的函数
String name = GetName(m_iHeight);
***************************************************/
还请明示。
--------------
嗯,我打算将一个类里面的属性保存到一个xml文件里面去,方便进行导入和保存
对应的xml element的名称采用变量的名称的字符串
--------------
如果要使用序列化,可以参考下面的代码及说明:
1:序列化并保存一个类的实例//可序列化的类(对类使用了[Serializable])的一个实例
MySerializableClass myObject = new MySerializableClass();
// 对myObject进行必要的设置,比如属性的设置
//...
//使用Xml把这个对象序列化并保存到一个Xml文件中:
XmlSerializer mySerializer = new XmlSerializer(typeof(MySerializableClass));
StreamWriter myWriter = new StreamWriter("myFileName.xml");
//写入myObject
mySerializer.Serialize(myWriter, myObject);
//关闭保存文件
myWriter.Close();
2:反序列化类的实例还原对象
//声明一个可序列化的类的变量以存放被还原的实例
MySerializableClass myObject;
//使用序列化类还原对象
XmlSerializer mySerializer = new XmlSerializer(typeof(MySerializableClass));
// 从Xml文件中读取数据
FileStream myFileStream = new FileStream("myFileName.xml", FileMode.Open);
// 调用Deserialize以反序列化还原对象
myObject = (MySerializableClass) mySerializer.Deserialize(myFileStream)
但是可能涉及到一系列问题:
1,程序版本更新了,以前保存的可能不能再导入了
2,有些信息我不想保存进文件,例如密码等
还有类里面包含其他类,以及用xml动态地修改这个类的属性等
我还没有想清楚能不能用这种方法来替代看样子是没有什么好方法获得指定变量的名称了
以前用C++直接宏定义就可以实现了
想不到C#这么麻烦
谢谢各位的参与
这个代码放在什么位置,类的seriallize()方法里面吗?
你是不是需要写
void seriallize(){
save(i_height):
save(i_width);
}
而这个save方法会同时取得名字和值?
你不想写成
save("i_height",i_height);
save("i_width",i_width);
因为怕这两个名字写错了不对应,搞错?
那岂不是很简单?!我知道你该怎么做,给分!
^_^
分我已经给完了
希望友情展示如何做我用C++的代码大约如下:
1:
#define GetName(a) (#a)
那么GetName(m_iHeight)就是字符串"m_iHeight"调用函数的就是
#define PostEdit(a) function(a, #a)
之类
为: #define PostEdit(a) function(##a, #a)
[XmlAttribute("sName")]
public string Name
{
get { return sName ; }
set { sName = value; }
}
class Example
{
public int m_iHeight;
public int m_iWidth; string GetString()
{
System.Reflection.FieldInfo[] fields = typeof(this).GetFields();
StringBuilder builder = new StringBuilder();
foreach(System.Reflection.FieldInfo info in fields)
{
builder.AppendLine(typeof(this).GetField(info.Name).GetValue(this).ToString());
}
return builder.ToString();
}
}应该会得到你想要的字符串。格式上自己再改改。
string GetName(int height)
{
this.GetType().GetField()
}
this.GetType().GetField(str).GetValue(this).ToString());