Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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# 为什么匿名类型的AssemblyQualifiedName不总是相同的?_C#_.net_Reflection_System.reflection - Fatal编程技术网

C# 为什么匿名类型的AssemblyQualifiedName不总是相同的?

C# 为什么匿名类型的AssemblyQualifiedName不总是相同的?,c#,.net,reflection,system.reflection,C#,.net,Reflection,System.reflection,我试图通过AssemblyQualifiedName从程序集集合中查找匿名类型,但尽管该匿名类型存在于扫描的程序集中,但找不到。GetTypes()似乎返回带有其他AssemblyQualifiedNames的类型 为什么AssemblyQualifiedNames不同,如何在给定的程序集中找到正确的类型 [Fact] public void AnonTypes() { var entity = new { SomeString = "Asger

我试图通过AssemblyQualifiedName从程序集集合中查找匿名类型,但尽管该匿名类型存在于扫描的程序集中,但找不到。GetTypes()似乎返回带有其他AssemblyQualifiedNames的类型

为什么AssemblyQualifiedNames不同,如何在给定的程序集中找到正确的类型

    [Fact]
    public void AnonTypes()
    {
        var entity = new { SomeString = "Asger" };
        var type = entity.GetType();
        var assemblyQualifiedName = type.AssemblyQualifiedName;

        var types = type.Assembly.GetTypes()
            .Where(x => x.AssemblyQualifiedName == assemblyQualifiedName)
            .ToList();

        types.Count.ShouldBe(1);
    }
请注意Type.GetType(assemblyQualifiedName)会找到该类型,但我不能使用此方法,因为我并不总是有assemblyQualifiedName,而是要搜索其他限定符


还请注意,如果实体是ValueTuple,也会发生同样的情况。

问题在于

var x=new{SomeString=”“};
创建一个类似

public class AnonymousType0<T> 
{
    public T SomeString { get; set; }
}
公共类匿名类型0
{
公共T SomeString{get;set;}
}
因此
x.GetType().AssemblyQualifiedName
返回包含泛型类型信息的类型的名称。 要使其工作,您需要调用
GetGenericTypeDefinition()
,以摆脱泛型类型信息


例如,类型
List
的AssemblyQualifiedName类似于
System.Collections.Generic.List``1[[System.Int32,…],…
,但在
assembly.GetTypes()
中,您会发现
System.Collections.Generic.List``1,
问题是这样的代码

var x=new{SomeString=”“};
创建一个类似

public class AnonymousType0<T> 
{
    public T SomeString { get; set; }
}
公共类匿名类型0
{
公共T SomeString{get;set;}
}
因此
x.GetType().AssemblyQualifiedName
返回包含泛型类型信息的类型的名称。 要使其工作,您需要调用
GetGenericTypeDefinition()
,以摆脱泛型类型信息


例如,类型
List
将具有AssemblyQualifiedName,如
System.Collections.Generic.List``1[[System.Int32,…],…
,但在
assembly.GetTypes()
中,您会找到
System.Collections.Generic.List``1,
,谢谢,但是为什么这些类型是从assembly.GetTypes()返回的呢不返回相同的AssemblyQualifiedName(带有泛型类型信息)?我相信如果我使用GetGenericTypeDefinition(),我将找不到我需要的封闭泛型类型,或者我误解了您的意思?
assembly.GetTypes()
返回所有已定义类型的列表。对于泛型类型,例如
List
,它将包含类型
List
,但不包含派生类型
List
。当然可以。我误以为匿名类型的封闭形式也在程序集中定义。现在我明白了,它们显然不是,这毫无意义:)忘记标记为答案,抱歉,现在完成:)谢谢,但是为什么从assembly.GetTypes()返回的类型不返回相同的AssemblyQualifiedName(带有泛型类型信息)?我相信如果我使用GetGenericTypeDefinition(),我将找不到我需要的封闭泛型类型,或者我误解了您的意思?
assembly.GetTypes()
返回所有已定义类型的列表。对于泛型类型,例如
List
,它将包含类型
List
,但不包含派生类型
List
。当然可以。我误以为匿名类型的封闭形式也在程序集中定义。现在我明白了,他们显然不是,这是毫无意义的:)忘记标记为答案,对不起,现在完成:)