找遍stackoverflow,没找到答案,那位进来看看?

cykb518 2012-10-29 10:50:37

public class Employee
{
private string name;
private int id;
public string Name
{
get { return name; }
set { name = value; }
}
public int ID
{
get { return id; }
set { id = value; }
}
}
protected void Test3()
{
Type myType = typeof(Employee);
FieldInfo[] fi = myType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
foreach (var r in fi)
{
MemberTypes mymembertyps = r.MemberType;
//我能找到这个r 对应的属性么?
}
PropertyInfo[] pi = myType.GetProperties(BindingFlags.Public | BindingFlags.Instance);
}

我们知道通过GetFields可以找到这个类的所有字段,通过GetProperties可以找到这个类的所有属性。
现在的问题是这样的,比如我在遍历字段集合的时候,能不能找到当前这个字段对应的属性?
或者遍历属性集合的时候,能不能找到当前属性对应的字段?
三思而后答。
...全文
247 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cykb518 2012-10-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

Field和Property本身并没有对应关系,只是一般生成的代码看起来像有对应关系

C# code

public class Customer
{
private string name;
public string Name
{
get { return name; }
……
[/Quote]
哎,好像确实是这样
cykb518 2012-10-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

查找字段对应的后备属性?

这需要反射获得IL,然后反编译,再解析了。因为很多时候属性访问器是复杂的,看下面的代码:

C# code
class Person
{
public int ID { get; set; }
private string firstName;
private string lastName;
public string Na……
[/Quote]
这样看来确实找不到这个字段和属性有什么关联关系?
threenewbee 2012-10-30
  • 打赏
  • 举报
回复
查找字段对应的后备属性?

这需要反射获得IL,然后反编译,再解析了。因为很多时候属性访问器是复杂的,看下面的代码:

class Person
{
public int ID { get; set; }
private string firstName;
private string lastName;
public string Name
{
get { return firstName + " " + lastName; }
set { firstName = (value + " ").Split(' ')[0]; lastName = (value + " ").Split(' ')[1]; }
}
public string Profile
{
get
{
DbContext db = new DbContext();
return db.Users.SingleOrDefault(x => x.ID == ID).Profile;
}
}
public int RandomNumber { get { return new Random().Next(0, 100); } set { } }
}


请你告诉我,这些属性的后备字段是什么?
MoXiaoRab 2012-10-29
  • 打赏
  • 举报
回复
Field和Property本身并没有对应关系,只是一般生成的代码看起来像有对应关系


public class Customer
{
private string name;
public string Name
{
get { return name; }
set
{
if(string.IsNullOrEmpty(name))throw new ArgumentException("Name cannot be blank","Name");
name = value;
}
}
}


cykb518 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

数组 查找 Rank 这个 属性。、

集合 用 Item 这个属性。

查找, 多看看 反射,
[/Quote]
make no sence
cykb518 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

foreach (var r in fi)
{
//MemberTypes mymembertyps = r.MemberType;
Response.Write(r.Name + "<br />");//字段对应的属性
//这个r.Name就是这个字段的name,根本不是他对应的属性。下面的同理
//这个地方的结果就是name和id,根本不是Name 和ID这两个属性
}
PropertyInfo[……
[/Quote]

你自己单步调试一下,你这样是不行的。
cykb518 2012-10-29
  • 打赏
  • 举报
回复
高手都到哪儿去了?
XBodhi. 2012-10-29
  • 打赏
  • 举报
回复
数组 查找 Rank 这个 属性。、

集合 用 Item 这个属性。

查找, 多看看 反射,
白云任去留 2012-10-29
  • 打赏
  • 举报
回复
foreach (var r in fi)
{
//MemberTypes mymembertyps = r.MemberType;
Response.Write(r.Name + "<br />");//字段对应的属性
}
PropertyInfo[] pi = myType.GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo o in pi)
{
Response.Write(o.Name + "<br />");//属性对应的字段

}
白云任去留 2012-10-29
  • 打赏
  • 举报
回复
对应的属性: r.Name 即可

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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