首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何只找到同时具有getter和setter的属性?

如何只找到同时具有getter和setter的属性?
EN

Stack Overflow用户
提问于 2018-06-19 05:30:27
回答 2查看 0关注 0票数 0

C#,.NET 3.5

我试图获得一个对象的所有属性,这个对象具有一个getter和一个setter的实例。我认为应该工作的代码是

代码语言:javascript
复制
PropertyInfo[] infos = source.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty | BindingFlags.GetProperty);

然而,结果包括一个没有setter的属性。为了让你简单了解我的继承结构,可能会影响到这一点(尽管我不知道如何):

代码语言:javascript
复制
public interface IModel
{
    string Name { get; }
}

public class BaseModel<TType> : IModel
{
    public virtual string Name { get { return "Foo"; } }

    public void ReflectionCopyTo(TType target)
    {
        PropertyInfo[] infos = this.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty | BindingFlags.GetProperty);
        foreach (PropertyInfo info in infos)
            info.SetValue(target, info.GetValue(this, null), null);
    }
}

public class Child : BaseModel<Child>
{
    // I do nothing to override the Name property here
}

使用名称时,我最终遇到以下错误:

代码语言:javascript
复制
System.ArgumentException: Property set method not found.
EN

回答 2

Stack Overflow用户

发布于 2018-06-19 14:18:56

不如试试:

代码语言:txt
复制
var qry = typeof(Foo).GetProperties(BindingFlags.Instance | BindingFlags.Public)
            .Where(p => p.CanRead && p.CanWrite);
票数 0
EN

Stack Overflow用户

发布于 2018-06-19 15:16:31

调用GetGetMethodGetSetMethod属性 - 如果两个结果是非空的,那就成了

(无参数版本只返回公共方法;有一个带有布尔参数的重载指定您是否也想要非公有方法。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100000298

复制
相关文章

相似问题

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