如何使用"是"一个对象的关键字?

时间:2016-06-01 11:43:29

标签: c# as-keyword

如何将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指令或程序集引用?)

3 个答案:

答案 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