-3

如何将is关键字与对象而不是对象的类一起使用?

这是一些代码:

private bool IsObjectCompatableWithObjects(object obj, IEnumerable<object> objects)
{
    foreach (var item in objects)
    {
        if (obj is item)
        {
            return true;
        }
    }
    return false;
}

上面的代码有以下错误:

找不到类型或命名空间名称“item”(您是否缺少 using 指令或程序集引用?)

4

3 回答 3

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
于 2016-06-01T11:53:04.563 回答
0

is用于对type自身而不是对类型的实例。因此,如果您需要检查项目是否为 object 类型,您可能应该编写 -

if (item is Object)

代替

 if (obj is item)

但后来一切都是object,所以它没有什么帮助。如果您只需要检查列表中的项目类型是否与类型对象相同,那么您应该这样做 -

 if (item.GetType() == obj.GetType())
于 2016-06-01T11:53:14.930 回答
0

如果您想查看您的对象是否包含在您的可枚举对象中,您可以使用Enumerable.Containsfrom 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;
}

您可以在此处查找确切的实现。

于 2016-06-01T11:57:21.510 回答