[英]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>
。 list1
和list2
都不是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.