我有以下代码来优化执行时间,只搜索一次类型:
但是这并没有优化我的执行,因为每次调用都会查询CurrentDomain。所以我接着添加了.ToArray(),然后将返回类型更改为Type[]。
现在我的问题是:我应该选择什么返回类型?我应该保留返回类型为IEnumerable吗?如果是,为什么?ReSharper对此问题没有任何建议。
谢谢, Drutten
编辑:为了澄清,GetAssemblies()在应用程序的生命周期内不会改变。
internal static Type[] SpecTestClasses =
AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(t => t.GetTypes())
.Where(t =>
t.GetCustomAttribute<CompilerGeneratedAttribute>() == null &&
t.GetCustomAttribute<TestClassAttribute>() != null &&
t.GetCustomAttribute<SerialSeleniumTestAttribute>() != null)
.ToArray();
我曾经拥有:
internal static IEnumerable<Type> SpecTestClasses =
AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(t => t.GetTypes())
.Where(t =>
t.GetCustomAttribute<CompilerGeneratedAttribute>() == null &&
t.GetCustomAttribute<TestClassAttribute>() != null &&
t.GetCustomAttribute<SerialSeleniumTestAttribute>() != null);
但是这并没有优化我的执行,因为每次调用都会查询CurrentDomain。所以我接着添加了.ToArray(),然后将返回类型更改为Type[]。
现在我的问题是:我应该选择什么返回类型?我应该保留返回类型为IEnumerable吗?如果是,为什么?ReSharper对此问题没有任何建议。
谢谢, Drutten
编辑:为了澄清,GetAssemblies()在应用程序的生命周期内不会改变。
GetAssemblies()
的结果在调用之间不会改变?那么你应该将第一次调用的结果缓存到一个私有容器中,可以是任何类型,并返回一个可枚举对象。 - Peter - Reinstate Monica