如何从类中获取“ReadOnly”或“WriteOnly”属性?

     2023-02-22     19

关键词:

【中文标题】如何从类中获取“ReadOnly”或“WriteOnly”属性?【英文标题】:How to get 'ReadOnly' or 'WriteOnly' properties from a class? 【发布时间】:2013-03-04 13:52:39 【问题描述】:

我需要从 MyClass 中获取属性列表,不包括“只读”属性,我可以获取它们吗?

public class MyClass

   public string Name  get; set; 
   public int Tracks  get; set; 
   public int Count  get; 
   public DateTime SomeDate  set; 


public class AnotherClass

    public void Some()
    
        MyClass c = new MyClass();

        PropertyInfo[] myProperties = c.GetType().
                                      GetProperties(BindingFlags.Public |
                                                    BindingFlags.SetProperty |
                                                    BindingFlags.Instance);
        // what combination of flags should I use to get 'readonly' (or 'writeonly')
        // properties?
    

最后,我能把它们排序吗?我知道添加 OrderBy,但是怎么做呢?我只是在使用扩展。 提前致谢。

【问题讨论】:

PropertyInfo 上有几个属性表明可读/写能力 myProperties.IsReadOnly 是 PropertyInfo[] 属性之一 仅供参考:BindingFlags.SetProperty 在这种情况下不会做任何事情。 【参考方案1】:

您不能使用 BindingFlags 来指定只读或只写属性,但可以枚举返回的属性,然后测试 PropertyInfo 的 CanRead 和 CanWrite 属性,如下所示:

PropertyInfo[] myProperties = c.GetType().GetProperties(BindingFlags.Public |
                                                    BindingFlags.SetProperty |
                                                    BindingFlags.Instance);

foreach (PropertyInfo item in myProperties)

    if (item.CanRead)
        Console.Write("Can read");

    if (item.CanWrite)
        Console.Write("Can write");

【讨论】:

抱歉,我忘记了排序请求 - 您希望它们如何排序?通过读\写、只读、只写,还是按名称等? 如果你能举出你所说的例子,我将非常感激。 我现在明白了,PropertyInfo[] ... .Where(p => p.CanWrite).OrderBy(x => x.Name).ToArray(); 在这种情况下包含BindingFlags.SetProperty 没有用,是吗?除此之外,GetProperties().Where(p => p.CanWrite) 或者 Where(p => p.CanRead && p.CanWrite) 是一个很好的解决方案。

如何从类中获取二元运算符?

】如何从类中获取二元运算符?【英文标题】:HowcanIgetaBinaryOperatorfromaClass?【发布时间】:2021-08-1221:57:14【问题描述】:有没有办法获得与类相关的二元运算符?我有这个方法有两个参数:public<TextendsNumber>T[]sumArray(T[]arrayToA... 查看详情

Eiffel:如何创建和使用 UTIL 类,或“从类中调用静态方法”

】Eiffel:如何创建和使用UTIL类,或“从类中调用静态方法”【英文标题】:Eiffel:howdoIcreateanduseanUTILclass,or"callstaticmethodfromclass"【发布时间】:2018-10-1211:13:04【问题描述】:正如mypost描述的那样,我想创建一个带有never_both... 查看详情

如何从类中调用片段

】如何从类中调用片段【英文标题】:Howtocallafragmentfromaclass【发布时间】:2019-12-3020:01:39【问题描述】:我只想从这个类中调用片段。实际上,我的应用程序中有很多片段,必须一次又一次地调用它们。所以我想创建一个类和... 查看详情

从类中获取价值到另一个 Python

...管理器创建图形界面。我已经制作了登录页面。我不知道如何将我的密码登录上传到另一个文件中的其他班级以解密我的其他密码?classMainApp(MDApp):defbuild(self):self.theme_cls.theme 查看详情

从类中获取可为空的 var

】从类中获取可为空的var【英文标题】:Getanullablevarfromaclass【发布时间】:2020-04-1417:12:57【问题描述】:首先让我说我的Kotlin经验有限。我试图从一个类中获取一个可以为空的var,但是每当我执行它时都会得到一个空指针。类... 查看详情

从类中的串行端口访问 WinForms 控件

】从类中的串行端口访问WinForms控件【英文标题】:AccessingWinFormsControlsfromaserialportinaclass【发布时间】:2013-11-1123:52:38【问题描述】:首先,道歉:我是新来在这个网站上发布问题的,所以对于格式或信息错误,我深表歉意。我... 查看详情

如何从类中为 EnvironmentObject 设置值?

】如何从类中为EnvironmentObject设置值?【英文标题】:HowtosetvaluetoEnvironmentObjectfromclass?【发布时间】:2020-03-1907:01:50【问题描述】:我想从Delegate类中为EnvironmentObject设置值。structAppleMapView:UIViewRepresentable@EnvironmentObjectvarmapViewViewMo... 查看详情

使用线程安全方法从类中的多个方法填充 Collection 或 Map

】使用线程安全方法从类中的多个方法填充Collection或Map【英文标题】:PopulatingaCollectionorMapfrommultiplemethodsinaclassusingathreadsafeapproach【发布时间】:2021-03-1318:49:32【问题描述】:请告知解决以下问题的最佳方法:我有一个java类如... 查看详情

您可以从类中获取实例变量名称吗? [复制]

】您可以从类中获取实例变量名称吗?[复制]【英文标题】:Canyougettheinstancevariablenamefromaclass?[duplicate]【发布时间】:2015-08-2305:00:57【问题描述】:我知道你不应该在程序中使用变量名,但我使用的只是为了调试目的,并希望将... 查看详情

Javascript - 从数组中查找所有类,从类中获取并返回内部文本

】Javascript-从数组中查找所有类,从类中获取并返回内部文本【英文标题】:Javascript-findallclassesfromarray,grabandreturninnertextfromclasses【发布时间】:2013-11-2401:09:27【问题描述】:我有一组要在页面中搜索的类名。然后我想找到所有... 查看详情

如何使用 Visual Studio(和/或 ReSharper)从类字段生成构造函数?

】如何使用VisualStudio(和/或ReSharper)从类字段生成构造函数?【英文标题】:HowdoIgenerateaconstructorfromclassfieldsusingVisualStudio(and/orReSharper)?【发布时间】:2011-02-2721:57:39【问题描述】:我已经习惯了许多JavaIDE(Eclipse、NetBeans和Intell... 查看详情

如何阻止 ProGuard 从类中剥离 Serializable 接口

】如何阻止ProGuard从类中剥离Serializable接口【英文标题】:HowtostopProGuardfromstrippingtheSerializableinterfacefromaclass【发布时间】:2013-04-1023:44:02【问题描述】:是否有明确的方法来阻止ProGuard更改类以实现接口?我有一个实现java.io.Seria... 查看详情

机器人框架:无法使用 __eq__ 方法从类中获取关键字

】机器人框架:无法使用__eq__方法从类中获取关键字【英文标题】:RobotFramework:Unabletogetkeywordsfromclasswith__eq__method【发布时间】:2017-11-0123:27:53【问题描述】:如果python类包含__eq__方法,机器人框架无法从类中获取关键字(如果_... 查看详情

如何在主方法中从类中调用构造函数

】如何在主方法中从类中调用构造函数【英文标题】:Howtocallaconstructorfromaclass,inmainmethod【发布时间】:2013-08-2719:35:58【问题描述】:我知道这可能是一个超级简单的问题,但我似乎一辈子都搞不明白。正如标题所述,我只想在M... 查看详情

无法从类中检索值

】无法从类中检索值【英文标题】:UnabletoretrievevaluesfromClass【发布时间】:2020-06-0518:26:19【问题描述】:好的,所以我们现在正在学校学习类和构造函数。我觉得这应该可以工作,因为它几乎就像使用struct一样,但这有点让我... 查看详情

Grails / Spock:如何在类中模拟从类本身调用方法的单个方法?

】Grails/Spock:如何在类中模拟从类本身调用方法的单个方法?【英文标题】:Grails/Spock:Howtomocksinglemethodwithinclasswheremethodiscalledfromwithintheclassitself?【发布时间】:2015-02-1107:25:28【问题描述】:鉴于以下情况,我如何使用Spock模拟pr... 查看详情

在 C# 中从类中声明一个数组

】在C#中从类中声明一个数组【英文标题】:DeclaringanArrayfromaClassinC#【发布时间】:2020-03-0220:25:42【问题描述】:我想创建一个由我用类定义的"Highscore"对象组成的数组。当我尝试设置或读取特定数组内容的值时,我总是收到NullR... 查看详情

如何以非阻塞、不可中断的方式从类中运行 C++ 函数 [关闭]

】如何以非阻塞、不可中断的方式从类中运行C++函数[关闭]【英文标题】:Howtorunac++functionfromaclassinanon-blockingnon-interruptableway[closed]【发布时间】:2021-01-2920:21:23【问题描述】:我有一个c++问题,我不知道该问什么,考虑到我几周... 查看详情