if(customerList.Count > 0)
{
if(typeof(customerList[0]).IsReferenceType)
{
// do what I want
}
}
你会怎么做?
答案 0 :(得分:9)
确定列表中的第一项是否为引用类型的对象:
bool isReferenceType = !(customerList[0] is ValueType);
要确定某个列表是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