为什么assembly.GetExportedTypes()在C#和VB.NET中显示不同的结果?
这两个给出不同的结果
var v = from a in AppDomain.CurrentDomain.GetAssemblies() from b in a.GetExportedTypes() select b;
v.Count();
Dim v = From a In AppDomain.CurrentDomain.GetAssemblies(), b In a.GetExportedTypes() Select b v.Count()
答案 0 :(得分:1)
编译VB.NET程序集时,它包含一些额外的“帮助程序”类型。使用Reflector查看已编译的程序集,看看我的意思。
我很确定你会发现唯一有差异的程序集就是你用来做反射的程序集 - 即用C#或VB.NET构建的程序集,具体取决于你的场景
编辑:这取决于你如何定义你的类。
但是,这只是仅与C#或VB编译器编译的代码相关。当您致电GetExportedTypes
时,您拨打的语言无关紧要。你只是在写出总数,这让你感到困惑。以下是两个简短但完整的程序,以显示差异:
<强> C#强>
using System;
using System.Reflection;
public class ShowTypeCounts
{
static void Main()
{
AppDomain domain = AppDomain.CurrentDomain;
foreach (Assembly assembly in domain.GetAssemblies())
{
Console.WriteLine("{0}: {1}",
assembly.GetName().Name,
assembly.GetExportedTypes().Length);
}
}
}
结果:
mscorlib: 1282
ShowTypeCounts: 1
<强> VB 强>
Imports System
Imports System.Reflection
Public Module ShowCounts
Sub Main()
Dim domain As AppDomain = AppDomain.CurrentDomain
For Each assembly As Assembly in domain.GetAssemblies
Console.WriteLine("{0}: {1}", _
assembly.GetName.Name, _
assembly.GetExportedTypes.Length)
Next
End Sub
End Module
结果:
mscorlib: 1282
ShowTypeCounts: 1
正如您所看到的,结果是相同的 - 但如果您从任一代码中删除“public”,ShowTypeCounts结果将下降到0.这不是GetExportedTypes在语言之间如何工作的区别 - 它只是取决于您实际导出的类型。
我的猜测是,在你的控制台应用中,一个有公共类型而另一个没有。