【问题标题】:how to check if an object is object[0]?如何检查对象是否为对象[0]?
【发布时间】:2017-01-08 02:03:17
【问题描述】:

在调试模式下,我将鼠标悬停在我的变量上,它显示它是 {object[0]}:

但是,这个 IF 语句永远不会被触发。

如何检查此对象[0] 类型?

【问题讨论】:

  • object[0] 可能意味着它是一个很难说的空集合。这个对象是从哪里来的?
  • 在这种情况下 element.GetType().FullName 返回什么?
  • 你的 if 语句似乎没有多大意义。您能否更新答案并解释您使用此检查的原因?
  • 或者为上下文提供更多代码。
  • 数组是IEnumerable,所以也许你可以改成element is IEnumerable && ...

标签: c# .net visual-studio dynamicobject


【解决方案1】:

要检查object 是否为object[],您的检查element is object[] 已经正确。

要检查object[] 是否为空,调用Any() 已经正确,但请确保在正确的实例上调用它。避免使用 ToEnumerable() 扩展方法,因为它没有达到您的预期。

if (element is object[] && !((object[]) element).Any())
    // element is an empty array of objects

测试:

using System;
using System.Collections.Generic;
using System.Linq;

namespace Tester {
    static class Program {
        static void Test(string name, object element) {
            Console.Write($"{name}: ");
            Console.WriteLine(element is object[] && !((object[])element).Any());
        }

        static void Main(string[] args) {
            Test("new object()",       new object());       // false
            Test("new { }",            new { });            // false
            Test("new object[0]",      new object[0]);      // true
            Test("new object[1]",      new object[1]);      // false

            Test("new List<object>()", new List<object>()); // false
            // Note: object[] o = new List<object>(); wouldn't be allowed.

            Test("new string[0]",      new string[0]);      // true
            // Note: object[] o = new string[0]; would be allowed.

            Test("new int[0]",         new int[0]);         // false
            // Note: object[] o = new int[0]; wouldn't be allowed.
        }
    }
}

这包括一些测试用例,它们可能表明您尝试进行的检查不是一个好主意,但也表明它提供了准确的结果。

【讨论】:

    【解决方案2】:

    没有object[0] 类型。它告诉你的是它是一个空的对象数组。

    【讨论】:

      【解决方案3】:

      你试过了吗:

      var test = element as IEnumerable;
      
      If (test != null && test.Any())
      {
      

      【讨论】:

      • 我有,看起来如果元素是一个 Guid 那么它就是一个 IEnumerable
      • @l--''''''---------'''''''''''' 不,Guid 没有实现 @987654325 @。也许您正在查看恰好代表 Guid 的stringstring 实现 IEnumerable
      猜你喜欢
      • 2021-10-29
      • 2010-09-27
      • 2010-12-23
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      相关资源
      最近更新 更多