c"?-6ren"> c"?-我们有一堆在我们的集成测试中执行的 EF 迁移类。对于一些测试,我们使用反射找到迁移类: var dbMigrationClasses = migrationsAssembly.GetTypes() -6ren">
gpt4 book ai didi

c# - 为什么我的一些类名在新的 VS 2015 编译器中返回为 "<>c"?

转载 作者:行者123 更新时间:2023-11-30 12:58:07 25 4
gpt4 key购买 nike

我们有一堆在我们的集成测试中执行的 EF 迁移类。对于一些测试,我们使用反射找到迁移类:

var dbMigrationClasses = migrationsAssembly.GetTypes()
.Where(t => t.IsSubclassOf(typeof(DbMigration)));

然后我们在一些测试中使用 .Name 属性:

var migrationsWithInvalidClassNames = migrationClasses
.Where(mt => !IsValidMigrationClassName(mt.Name));

但是,自从升级到 VS 2015 RC 后,我们的许多类将其名称报告为“<>c”,并且 FullName 也以此结尾:

Name = "<>c"
FullName = "DataMigrations.Migrations._20150121090200_DoSomeStuff+<>c"

这从来没有发生过(我猜是 VS 2015 的新编译器导致了它),而且它只发生在我们的一些(可能四分之一)迁移类中。所有的类看起来都是一样的(都是内部的,相同的方法/属性)。

我可以通过读取 FullName 并将其剥离来处理这个问题,但我很想知道发生了什么以及为什么它只影响某些类。这是两个示例类,一个很好,一个是 <>c .我删除的只是其中的 SQL:

// File 1
namespace NewMind.DMS.DataMigrations.Migrations
{
[MigrationName("Drop the SavedSearchJSON column from the SavedSearch table.")]
internal class _20150121143400_DropTheSavedSearchJSONColumnFromTheSavedSearchTable : DmsMigration
{
public override void Up()
{
Sql(@"(SNIP)");
}
}
}

// File 2
namespace NewMind.DMS.DataMigrations.Migrations
{
[MigrationName("Update Facility Key data type as it was incorrectly smallint in some databases.")]
internal class _20150424130800_StandardiseFacilityKeyDataType : DmsMigration
{
public override void Up()
{
Sql(@"(SNIP)");
}
}
}

最佳答案

您不需要使用 FullName - _20150121090200_DoSomeStuff部分只是“父”类。 <>c嵌套在 _20150121090200_DoSomeStuff 中.因此,要获取嵌套类及其父类的名称,您可以这样做:

public static string GetAnonymousName(this Type type)
{
if (!type.IsNested) return type.Name;

return type.DeclaringType.GetAnonymousName() + "+" + type.Name;
}

我认为它在 VS2015 中没有改变。也许您正在使用较新版本的 Entity Framework 或类似的东西?

关于c# - 为什么我的一些类名在新的 VS 2015 编译器中返回为 "<>c"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31186543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com