Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何浏览我的解决方案的文件夹?_C#_Asp.net Mvc_Reflection - Fatal编程技术网

C# 如何浏览我的解决方案的文件夹?

C# 如何浏览我的解决方案的文件夹?,c#,asp.net-mvc,reflection,C#,Asp.net Mvc,Reflection,我在asp.net mvc上的一个解决方案中有7个项目。我将模型类、控制器、cshtml文件、视图模型等分离到其他项目中。在每一个项目中,我都会在其他文件夹中将类等分开。例如,在my Application.Viewmodel项目中,有4个文件夹,每个文件夹都有自己的viewmodels。当然,每个项目都有自己的名称空间。现在,我必须通过反射遍历文件夹,以获取每个文件夹的viewmodel名称。我可以使用下面的代码检索整个viewmodel名称。但重要的是要知道哪个viewmodel保留在哪个文

我在asp.net mvc上的一个解决方案中有7个项目。我将模型类、控制器、cshtml文件、视图模型等分离到其他项目中。在每一个项目中,我都会在其他文件夹中将类等分开。例如,在my Application.Viewmodel项目中,有4个文件夹,每个文件夹都有自己的viewmodels。当然,每个项目都有自己的名称空间。现在,我必须通过反射遍历文件夹,以获取每个文件夹的viewmodel名称。我可以使用下面的代码检索整个viewmodel名称。但重要的是要知道哪个viewmodel保留在哪个文件夹中。我想从每个文件夹中逐个获取viewmodel名称。我该怎么做

string @namespace = "Application.Viewmodel";

List<String> viewModels = new List<string>();
List<Type> returnVal = AppDomain.CurrentDomain
                                .GetAssemblies()
                                .SelectMany(t => t.GetTypes())
                                .Where(t => t.IsClass && t.Namespace == @namespace).ToList();

for (int i = 0; i < returnVal.Count; i++)
{
     viewModels.Add(returnVal[i].Name);
}
string@namespace=“Application.Viewmodel”;
列表视图模型=新列表();
List returnVal=AppDomain.CurrentDomain
.getAssemblys()
.SelectMany(t=>t.GetTypes())
.Where(t=>t.IsClass&&t.Namespace==@Namespace).ToList();
for(int i=0;i
编译代码时,不会保留原始文件的物理位置。程序集只是一组类型定义。你可以从PDB文件中得到,但实际上不是同一件事

如果需要组织类,应该使用名称空间来组织。执行类似于
MyProject.ViewModels.FolderA
MyProject.ViewModels.FolderB
的操作

下面是一个非常简单的示例,它假设名称空间的最后一段是唯一的部分:

var typesGroupedByNamespace = AppDomain.CurrentDomain
    .GetAssemblies()
    .SelectMany(t => t.GetTypes())
    .Where(t => t.IsClass && t.Namespace.StartsWith(@namespace))
    .GroupBy(t => t.Namespace.Substring(t.Namespace.LastIndexOf(".") + 1));

当我这样做时,我可以为名称空间使用foreach循环吗?我不想硬编码。@tameremili我不知道你在问什么。@tameremili我提供的代码示例将返回一个
I分组
,其中键值是名称空间的最后一段(即“FolderA”)。您可以在iGroup上循环以获取每个组的密钥及其成员。是的,这就是我要问的,谢谢您的帮助!明天我将在我的代码上试用它,如果它有效,我会这样做,别担心:)