簡體   English   中英

比較通用列表的類型

[英]Comparing types of generic lists

我正在嘗試按類型比較兩個IList<T> 兩個列表具有相同的T ,因此我認為它們應該具有相同的類型。

在工具提示的Visual Studio中的調試模式下,我可以讀取兩者的類型,並且它們是相同的。

但是Equals()==運算符都返回false

誰能解釋這個奇怪的行為?

小例子:

class Program
{
    static void Main(string[] args)
    {
        IList<string> list1 = new List<string>();
        IList<string> list2 = new List<string>();

        var type1 = list1.GetType();
        var type2 = typeof(IList<string>);

        if (type1.Equals(type2))
        {
            Console.WriteLine("equal");
        }
        else
        {
            Console.WriteLine("non equal");
        }

        Console.ReadLine();
    }
}

==>不等於

編輯:我提出了一個不好的例子,這個例子顯示了我試圖做到的方式。

我正在使用.Net 3.5

是的,您正在比較兩種類型: List<string>IList<string> 它們不是同一類型,我不知道為什么您希望它們相同。

目前尚不清楚您要做什么,但是您可能想要使用Type.IsAssignableFrom 例如,在您的示例中,

Console.WriteLine(type2.IsAssignableFrom(type1));

將打印True。


編輯之前的答案...

無法復制:

using System;
using System.Collections.Generic;

class Test
{
    static void Main()
    {
        IList<string> list1 = new List<string>();
        IList<string> list2 = new List<string>();

        var type1 = list1.GetType();
        var type2 = list2.GetType();

        Console.WriteLine(type1.Equals(type2)); // Prints True
    }
}

是否有可能在您的實際代碼中,它們都是IList<string>實現,但是不同的實現,例如

IList<string> list1 = new List<string>();
IList<string> list2 = new string[5];

這將顯示類型不同,因為一個是List<string> ,另一個是string[]

那是因為list1是List<string> (所以type1也是typeof(List<string>) ),類型2是typeof(IList<string>) 注意IList<string>List<string> list1list2都不是IList<string> ,它們都是List<T>的,它是從IList<T>派生的

如上所述,這確實是由於List<string>IList<string>不是同一類型的原因。

如果您的目標是確定您的類型是否實現接口(即IList<string> ),則可以通過反射來實現:

 if (type1.GetInterfaces().Contains(typeof(IList<string>)))
     Console.WriteLine("type1 implements IList<string>");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM