【问题标题】:How to get all classes in a Namespace using Reflection in a WP8.1 App?如何在 WP8.1 应用程序中使用反射获取命名空间中的所有类?
【发布时间】:2015-02-07 00:04:45
【问题描述】:

我已经阅读了几篇关于如何使用反射获取类的文章,即使 StackOverflow 中有不同的示例,但它们都与此版本的 WP 或 Windows 无关,如果您尝试这些代码,它们都不起作用。这是我尝试的最后一个:

string @namespace = "Supernova.Entities";

var types = Assembly.GetExecutingAssembly().GetTypes()
    .Where(t => t.IsClass && t.Namespace == @namespace)
    .ToList();

types.ForEach(t => Console.WriteLine(t.Name.GetType()));

我希望有人能给我一个想法,因为当我尝试类似的事情时,VS 总是告诉我:“System.Reflection.Assembly”不包含“GetExecutingAssembly”的定义。

我正在尝试使用它,但我不确定如何更改它。 Reflection WinRT

这是我的课:

namespace Supernova.Entities
{
    public class profile
    {
        [PrimaryKey]
        public string email { get; set; }
        public string firstName { get; set; }
        public string lastName { get; set; }
    }

    public class bloodResults
    {
        [PrimaryKey, AutoIncrement]
        public int idbloodresult { get; set; }
        public double result { get; set; }
    }
}

稍后我想使用反射创建每个实体,方法如下:

public static async void CreateDatabase()
{
   var profile = await ConnectionDb().CreateTableAsync<profile>();
   var bloodresults = await ConnectionDb().CreateTableAsync<bloodResults>();
}

我为什么要这样做?因为这不是我第一次使用 SQLite,我想创建一个标准方法来让我的工作更轻松。感谢您的宝贵知识。

【问题讨论】:

  • 旁注:由于命名空间与程序集没有正式关系(即与 Java 不同),因此您不能真正“获取命名空间中的所有类”,因为该集合不受任何约束……而且您可能的意思是“......来自这个命名空间中的这个程序集”。

标签: c# reflection windows-runtime windows-phone-8.1 win-universal-app


【解决方案1】:

GetExecutingAssembly 在 WinRT 中不可用,但您可以改用 typeof(AClassInYourAssembly).GetTypeInfo().Assembly

    string @namespace = "Supernova.Entities";
    var assembly = typeof(YourClass).GetTypeInfo().Assembly;
    var types = assembly.GetTypes()
        .Where(t => t.GetTypeInfo().IsClass && t.Namespace == @namespace)
        .ToList();

    types.ForEach(t => Console.WriteLine(t.Name));

【讨论】:

  • 但是我应该修改最后的代码吗?因为我不知道如何修改它。抱歉,因为我是 WP8.1 的新手,我在 WP8 上使用的最后一个代码,我没有任何问题。
  • @FANM,请参阅我的更新答案。顺便说一句,t.Name.GetType() 将永远是字符串,所以它可能不是你想要的......
  • 如果你愿意,我已经更新了我的帖子以显示我在看什么。感谢您宝贵的时间和帮助。
猜你喜欢
  • 2010-09-09
  • 2010-12-05
  • 2010-10-31
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
  • 2018-08-27
相关资源
最近更新 更多