【问题标题】:gets all static members of namespace获取命名空间的所有静态成员
【发布时间】:2012-06-16 13:54:06
【问题描述】:

我有一个带有静态成员的类。 我想获取他们的类在命名空间“foo”中定义并从类“bar”继承的所有静态成员的列表

类似list x= typeof(this).staticmembers.where(namespace == "foo");

试一试:

 var AllowedTypes = GetType().Assembly.GetTypes()
       .Where(x => x.Namespace == "XX.XXX.XXX")
       .Where(x => x.IsAssignableFrom(typeof(UserControl)));

    var StaticMembersOfAllowedTypes = typeof(MainWindowXX).GetMembers  (System.Reflection.BindingFlags.Static ).Where(item => AllowedTypes.Contains(item));

这给了我一个成员信息列表,但我想要这些项目本身。

所以我可以将每个项目与另一个项目进行比较。

【问题讨论】:

  • 您想在命名空间中获取所有静态Type 对吗?不是命名空间中定义的任何Type 的所有静态成员?
  • 我相信静态类型不能从其他类型继承,所以他可能想要那些类型的静态成员

标签: c# reflection


【解决方案1】:

我认为这可以解决问题。可能有错别字,我无法测试

var list x = GetType().Assembly.GetTypes()
                    .Where(x => x.Namespace == "foo" && typeof(bar).IsAssignableFrom(x))
                    .SelectMany(x => x.GetMembers(BindingFlags.Static));

您可能需要添加BindingFlags.Public:

x.GetMembers(BindingFlags.Static | BindingFlags.Public)

【讨论】:

  • 这让我走上了正轨。但我似乎无法获得成员本身,只有成员信息。你能帮忙吗
  • 会员信息代表会员。你真正需要什么? “成员本身”是什么意思?
猜你喜欢
  • 2012-05-27
  • 2018-04-16
  • 1970-01-01
  • 2013-03-10
  • 2015-03-14
  • 1970-01-01
  • 2010-12-22
  • 2015-08-04
  • 2014-02-19
相关资源
最近更新 更多