首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中有没有类似Python的getattr()的东西?

在C#中有没有类似Python的getattr()的东西?
EN

Stack Overflow用户
提问于 2008-09-26 06:35:30
回答 4查看 3K关注 0票数 15

在C#中有像Python's getattr()这样的东西吗?我想通过读取一个列表来创建一个窗口,该列表包含要放在窗口上的控件的名称。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-09-26 06:57:23

还有Type.InvokeMember

代码语言:javascript
复制
public static class ReflectionExt
{
    public static object GetAttr(this object obj, string name)
    {
        Type type = obj.GetType();
        BindingFlags flags = BindingFlags.Instance | 
                                 BindingFlags.Public | 
                                 BindingFlags.GetProperty;

        return type.InvokeMember(name, flags, Type.DefaultBinder, obj, null);
    }
}

它的用法如下:

代码语言:javascript
复制
object value = ReflectionExt.GetAttr(obj, "PropertyName");

或者(作为扩展方法):

代码语言:javascript
复制
object value = obj.GetAttr("PropertyName");
票数 13
EN

Stack Overflow用户

发布于 2008-09-26 06:39:44

为此,请使用反射。

Type.GetProperty()Type.GetProperties()各自返回PropertyInfo实例,该实例可用于读取对象的属性值。

代码语言:javascript
复制
var result = typeof(DateTime).GetProperty("Year").GetValue(dt, null)

Type.GetMethod()Type.GetMethods()各自返回MethodInfo实例,该实例可用于在对象上执行方法。

代码语言:javascript
复制
var result = typeof(DateTime).GetMethod("ToLongDateString").Invoke(dt, null);

如果您不一定知道类型(如果您创建了新的属性名称,可能会有点奇怪),那么您也可以这样做。

代码语言:javascript
复制
var result = dt.GetType().GetProperty("Year").Invoke(dt, null);
票数 5
EN

Stack Overflow用户

发布于 2008-09-26 06:40:58

是的,你能做到的.

代码语言:javascript
复制
typeof(YourObjectType).GetProperty("PropertyName").GetValue(instanceObjectToGetPropFrom, null);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/138045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档