相关疑难解决方法(0)

如何获取特定属性的PropertyInfo?

我想获取特定属性的PropertyInfo.我可以用:

foreach(PropertyInfo p in typeof(MyObject).GetProperties())
{
    if ( p.Name == "MyProperty") { return p }
}
Run Code Online (Sandbox Code Playgroud)

但必须有办法做类似的事情

typeof(MyProperty) as PropertyInfo
Run Code Online (Sandbox Code Playgroud)

在那儿?还是我坚持做一个类型不安全的字符串比较?

干杯.

c# reflection

77
推荐指数
3
解决办法
6万
查看次数

Lambda表达式未返回预期的MemberInfo

我遇到了一个我没想到的问题.一个例子可能比一段更好地说明我的问题:

更新:跳转到最后一个代码块,以获得更有说服力的代码示例.

public class A
{
  public string B { get; set; }
}

public class C : A { }
Run Code Online (Sandbox Code Playgroud)

以下是方法中的一些代码:

var a = typeof(C).GetMember("B")[0];
var b = typeof(A).GetMember("B")[0];

Expression<Func<C, string>> c = x => x.B;

var d = (c.Body as MemberExpression).Member;
Run Code Online (Sandbox Code Playgroud)

以下是一些比较的结果:

a == b //false
a == d //false
b == d //true
Run Code Online (Sandbox Code Playgroud)

前两个有些出乎意料.我知道即使B不是虚拟的,C也可以用w new运算符定义一个具有相同名称的属性,但在这种情况下我没有.

第二个对我来说真是最让人惊讶的(也是我问题的核心).即使lambda的参数明确定义为C类,它仍然返回它,就像从基类访问属性一样.

我正在寻找的是一种从lambda表达式获取MemberInfo的方法,就好像我已经使用参数类型的反射来获取MemberInfo.我的项目本质上将MemberInfos存储在各种字典中,它需要具有可以通过提供lambda表达式来访问元素的功能.

重复的代码示例由Danny Chen提供

public class Base
{
    public string Name { get; set; }
}
public class Derived : Base …
Run Code Online (Sandbox Code Playgroud)

c# lambda

22
推荐指数
3
解决办法
8278
查看次数

如何从类实例的属性中获取属性名称?

这是我想让工作的那种代码:

string Name = GetPropName(myClass.SomeProperty); // returns "SomeProperty"
Run Code Online (Sandbox Code Playgroud)

因为我可能要重命名我的类的属性,所以我不想忘记在我的代码中的某处更改它们的字符串名称,并且有很多地方我使用字符串名称作为属性,所以我想要这个方便方法为我获取属性的当前名称作为字符串。我该怎么做呢?

我所追求的是一个方法,它只返回它作为参数接收的属性的字符串名称

我看到之前有人问过类似的问题,但是没有答案可以很好地解释如何做我想做的事情。

c# properties .net-4.5

0
推荐指数
1
解决办法
2806
查看次数

标签 统计

c# ×3

.net-4.5 ×1

lambda ×1

properties ×1

reflection ×1