检查List中的typeof(对象)是否为引用类型

时间:2010-10-08 21:36:41

标签: c# list object typeof

这对我来说很奇怪:

if(customerList.Count > 0)
{
   if(typeof(customerList[0]).IsReferenceType)
   {
      // do what I want
   }
}

你会怎么做?

4 个答案:

答案 0 :(得分:9)

  1. 确定列表中的第一项是否为引用类型的对象:

    bool isReferenceType = !(customerList[0] is ValueType);
    
  2. 要确定某个列表是List<T>是否为某个引用类型的T

    var listType = customerList.GetType();
    if (!listType.IsGeneric || listType.GetGenericTypeDefinition() != typeof(List<>))
        // It’s not a List<T>
        return null;
    return !listType.GetGenericArguments()[0].IsValueType;
    

答案 1 :(得分:1)

您可能正在尝试确定泛型集合的泛型参数的实际类型。就像在运行时确定什么是特定List<T>的T一样。这样做:

Type collectionType = typeof(customerList);
Type parameterType = collectionType.GetGenericArguments()[0];
bool isReference = !parameterType.IsValueType;

答案 2 :(得分:0)

bool isReferenceType = !(customerList[0] is ValueType);

修改

或者您正在寻找类似的东西:

bool listIsOfReferenceTypeObjects = !myList.GetType().GetGenericArguments()[0].IsValueType;

答案 3 :(得分:-1)

确定有效,当customerList为空时我也没有例外。

Type collectionType = customerList.GetType();
   Type parameterType = collectionType.GetGenericArguments()[0];
   bool isReference = !parameterType.IsValueType;

@Adesit你得到一分,因为你的样本是正确的,除了第一行:P