我有一个方法,我正在检查循环中的当前对象是否与我传入方法的类型相同。
首先,我将类型作为字符串传递给方法,然后使用:
item.GetType().ToString().Equals(myType);
我真正喜欢做的是使用is
关键字来执行:
item is myType
我遇到的问题是将myType
传递给方法。我需要使用某种时髦的泛型类型吗?我在一个类型的引用中传递什么类型?
答案 0 :(得分:1)
您可以使用普通等式运算符:
item.GetType() == myType;
如果item属于myType描述的确切类型,则返回true
。请注意,如果存在任何差异,它将返回false
:
class A { }
class B : A { }
B item = new B();
Type myType = typeof(A);
bool sameType = item.GetType() == myType; // this will be false
了解Type
个对象的一件好事是找到in the documentation的文本:
表示类型的
Type
对象 是独特的;也就是说,有两个Type
个对象 引用引用相同的对象if 并且只有它们代表相同 类型。这允许比较 使用引用相等的Type
个对象。
答案 1 :(得分:1)
你的意思是:
public List<T> GetItemsOfType<T>(List<object> allObjects)
{
return allObjects.Where(o => o is T).Cast<T>().ToList();
}
然后用
之类的东西打电话var result = GetItemsOfType<MyType>(myObjects);
答案 2 :(得分:1)
是这样的吗?
public static bool ContainsType<T>()
{
object[] objects = new object[] { };
foreach (var o in objects)
{
if (o is T)
{
return true;
}
}
return false;
}
public static void Main(string[] args)
{
ContainsType<int>();
}