【问题标题】:Pass in Type to check against传入类型以检查
【发布时间】:2010-01-12 21:10:20
【问题描述】:

我有一个方法,我正在检查循环中的当前对象是否与我传递给该方法的类型相同。

起初我将类型作为字符串传递给方法,然后使用:

item.GetType().ToString().Equals(myType);

我真正喜欢做的是使用is 关键字来做:

item is myType

我遇到的问题是将myType 传递给该方法。我是否需要使用某种时髦的泛型类型或其他东西?我应该将引用传递给什么类型?

【问题讨论】:

  • 我建议你只学习泛型,它会对你有很大帮助。你称它们为时髦的事实告诉我,你还没有真正了解它们的用法,但它们是如此普遍,以至于你基本上只是迟早需要它们。

标签: c# generics types


【解决方案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>();
}

【讨论】:

    【解决方案2】:

    你的意思是这样的:

        public List<T> GetItemsOfType<T>(List<object> allObjects)
        {
            return allObjects.Where(o => o is T).Cast<T>().ToList();
        }
    

    然后你会用类似的东西调用它

    var result = GetItemsOfType<MyType>(myObjects);
    

    【讨论】:

      【解决方案3】:

      您可以使用正常的相等运算符:

      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对象 引用指的是同一个对象,如果 并且仅当它们代表相同时 类型。这允许比较 Type 使用引用相等的对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-29
        • 1970-01-01
        • 1970-01-01
        • 2011-07-17
        • 2014-06-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多