C# 如何确定两个对象的类型是否兼容?

C# 如何确定两个对象的类型是否兼容?,c#,generics,types,comparison,compare,C#,Generics,Types,Comparison,Compare,我想知道如何编写一个通用函数 List<Something> something; public int countItems<T>(List<T> Items) { // Here I would like to compare the type of "Items" with the type of "something" to see if they are compatible. How do I do it? return 0; }

我想知道如何编写一个通用函数

List<Something> something;

public int countItems<T>(List<T> Items)
{
    // Here I would like to compare the type of "Items" with the type of "something" to see if they are compatible. How do I do it?
    return 0;
}
列出一些东西;
公共整数计数项(列表项)
{
//在这里,我想比较一下“项目”和“某物”的类型,看看它们是否兼容。我该怎么做?
返回0;
}

我想你想要的是使用这个界面

您可能想使用的另一个工具是,这样您就可以定义在什么情况下两个对象是相等的。

您的意思是:

if(typeof(T) == typeof(Something)) {...}
?

请注意,泛型在很大程度上依赖于T(并且行为不同),这可能意味着您试图做的事情实际上不是很泛型


这将比较实际对象的类型。

这个问题陈述得不好,而且有点模糊,但这可能会做到:

using System.Linq;

public int countItems<T>(List<T> Items)
{
    return Items.OfType<Something>().Where(thing => thisOneCounts(thing)).Count();
}
使用System.Linq;
公共整数计数项(列表项)
{
返回Items.OfType().Where(thing=>thisOneCounts(thing)).Count();
}

这实际上取决于您的比较方法。什么时候东西与物品相同?
var tAsSomething=物品[0]与物品相同;如果(tAsSomething!=null).
是我最好的猜测,如果我理解正确的话。XY问题的阴影。第一条评论似乎过于字面化了原始问题的标题,因此我将标题改为实际意思。也就是说,这个问题是不明确的,因为不清楚“兼容”在这里的含义,也不清楚为什么
countItems
是通用的,如果它只能计算
某物的列表。如果问题是您不能将
List
视为
List
,其中
D
是从
某物衍生而来的,那么请使用
IEnumerable
。OP可能想知道t是从某物衍生而来,还是从v.v.这并非完全不合理,因为您无法将
列表
转换为
列表
…但是应该使用
IEnumerable
。问题是关于比较类型,而不是值。您编辑了一个6年的问题(写得很差),然后明确地宣布了“真正”的含义。我坚持我的回答。如果OP当时回来澄清他们在寻找什么,我可能会提供一个更完善的答案,关于如何使用IComparable和运算符重载来完成手头的任务。使用重载=可以根据任何标准检查“兼容性”。我不同意这是关于类型的,当使用列表时,所有项目都是类型,因此必须在类型级别上“兼容”。问题的年龄无关紧要(但我喜欢广泛防御的虚伪性),我的确定性是有充分理由的,因为它来自OP示例中的注释,你显然从未读过,所以你站在肯定是错误的立场上。即使我的意思没有错,这也是一个糟糕的答案,因为它需要修改可能不在OP控制下的类。底线是,我简单的一行评论事实上是正确的,不值得你为毫无意义的回答付出所有努力。我不会再在这上面浪费时间了。
using System.Linq;

public int countItems<T>(List<T> Items)
{
    return Items.OfType<Something>().Where(thing => thisOneCounts(thing)).Count();
}