检查List中的typeof(object)是否是引用类型

发布于 2024-09-27 08:58:49 字数 174 浏览 2 评论 0原文

这对我来说似乎很奇怪:

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

你会怎么做?

this seems odd to me:

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

How would you do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

亣腦蒛氧 2024-10-04 08:58:49
  1. 判断列表中的第一项是否是引用类型的对象:

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

    var listType = customerList.GetType();
    if (!listType.IsGeneric || listType.GetGenericTypeDefinition() != typeof(List<>))
        // 这不是一个 List;
        返回空值;
    return !listType.GetGenericArguments()[0].IsValueType;
    
  1. To determine whether the first item in a list is an object of a reference type:

    bool isReferenceType = !(customerList[0] is ValueType);
    
  2. To determine whether a list is a List<T> for some T that is a reference type:

    var listType = customerList.GetType();
    if (!listType.IsGeneric || listType.GetGenericTypeDefinition() != typeof(List<>))
        // It’s not a List<T>
        return null;
    return !listType.GetGenericArguments()[0].IsValueType;
    
涙—继续流 2024-10-04 08:58:49

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

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

You are probably trying to determine the actual type of the generic parameter of a generic collection. Like determining at runtime what is a T of a particular List<T>. Do this:

Type collectionType = typeof(customerList);
Type parameterType = collectionType.GetGenericArguments()[0];
bool isReference = !parameterType.IsValueType;
メ斷腸人バ 2024-10-04 08:58:49
bool isReferenceType = !(customerList[0] is ValueType);

编辑

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

bool listIsOfReferenceTypeObjects = !myList.GetType().GetGenericArguments()[0].IsValueType;
bool isReferenceType = !(customerList[0] is ValueType);

EDIT

Or are you looking for something like:

bool listIsOfReferenceTypeObjects = !myList.GetType().GetGenericArguments()[0].IsValueType;
蹲墙角沉默 2024-10-04 08:58:49

好的,当 customerList 为空时,我没有遇到任何异常。

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

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

ok that worked and I get no exception, when the customerList is empty.

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

@Adesit you get a point because your sample was right except the first line :P

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文