如何将is
关键字与对象一起使用,而不是对象的类?
以下是一些代码:
private bool IsObjectCompatableWithObjects(object obj, IEnumerable<object> objects)
{
foreach (var item in objects)
{
if (obj is item)
{
return true;
}
}
return false;
}
上面的代码有以下错误:
类型或命名空间名称&#39; item&#39;无法找到(你错过了吗? using指令或程序集引用?)
答案 0 :(得分:0)
我想你是否正在努力实现这样的目标?
private bool IsObjectCompatibleWithObjects(object obj, IEnumerable<object> objects)
{
return objects.Any(i => i.GetType().IsAssignableFrom(obj.GetType()));
}
测试:
var objects = new object[] { 7, "foo", DateTime.Now, Guid.NewGuid() };
Console.WriteLine(IsObjectCompatibleWithObjects(1, objects));
Console.WriteLine(IsObjectCompatibleWithObjects("test", objects));
Console.WriteLine(IsObjectCompatibleWithObjects(3f, objects));
输出:
True
True
False
答案 1 :(得分:0)
is
用于type
本身,而不是用于类型实例。因此,如果您需要检查项目是否为object类型,您应该写一下 -
if (item is Object)
而不是
if (obj is item)
但是一切都是object
,所以它没有多大帮助。如果您只需检查列表中的类型if项是否与类型对象相同,那么您应该 -
if (item.GetType() == obj.GetType())
答案 2 :(得分:0)
如果您想查看对象是否包含在您的可用对象中,可以使用Enumerable.Contains
中的System.Linq
:
使用默认的相等比较器确定序列是否包含指定的元素。
你可以像这样使用它:
private static bool IsObjectCompatableWithObjects<T>(T obj, IEnumerable<T> objects)
{
return objects.Contains(obj);
}
基本上,你正在做这样的事情:
private static bool IsObjectCompatableWithObjects<T>(T obj, IEnumerable<T> objects)
{
foreach (var item in objects)
{
if (obj.Equals(item))
{
return true;
}
}
return false;
}
您可以查找具体的实施here。