【问题标题】:In C#, how can I tell if a property is static? (.Net CF 2.0)在 C# 中,如何判断一个属性是否是静态的? (.Net CF 2.0)
【发布时间】:2008-12-24 19:38:29
【问题描述】:

FieldInfo 有一个 IsStatic 成员,但 PropertyInfo 没有。我想我只是忽略了我需要的东西。

Type type = someObject.GetType();

foreach (PropertyInfo pi in type.GetProperties())
{
   // umm... Not sure how to tell if this property is static
}

【问题讨论】:

    标签: c# reflection compact-framework


    【解决方案1】:

    要确定属性是否为静态,您必须通过调用 GetGetMethod 或 GetSetMethod 方法获取 get 或 set 访问器的 MethodInfo,并检查其 IsStatic 属性。

    http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.aspx

    【讨论】:

    • BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy 为我工作。
    【解决方案2】:

    作为对所提出问题的实际快速简单的解决方案,您可以使用以下方法:

    propertyInfo.GetAccessors(true)[0].IsStatic;
    

    【讨论】:

      【解决方案3】:

      为什么不使用

      type.GetProperties(BindingFlags.Static)
      

      【讨论】:

      • 不错!但是,在我的情况下,我想要似乎没有绑定标志的非静态。
      • 这不会给你getter的静态绑定标志
      • 这不是一个有效的解决方案。首先,它甚至没有列出静态属性,因为绑定标志也应该指定访问级别(BindingFlags.PublicBindingFlags.NonPublic,或两者兼有)。其次,这只是列出了静态属性(输入是Type,输出是PropertyInfo[]),而问题是“给定一个属性,如何确定它是否是静态的?” (输入为PropertyInfo,输出为bool)。我想最接近您的建议的方法是在最后拍一下.Contains(property),但我认为这将是一个次优的解决方案。
      【解决方案4】:

      更好的解决方案

      public static class PropertyInfoExtensions
      {
          public static bool IsStatic(this PropertyInfo source, bool nonPublic = false) 
              => source.GetAccessors(nonPublic).Any(x => x.IsStatic);
      }
      

      用法:

      property.IsStatic()
      

      【讨论】:

        猜你喜欢
        • 2015-03-18
        • 1970-01-01
        • 1970-01-01
        • 2022-08-11
        • 1970-01-01
        • 2019-03-17
        • 2010-11-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多