2017-01-08 2 views
-3

オブジェクトがオブジェクト[0]かどうかをチェックする方法?デバッグモードでは、{[0]オブジェクト}</strong>私は私の変数の上に浮かんでいて、それが<strong>であることを示している

enter image description here

しかし、このIF文はトリガーなってされることはありません。

このオブジェクト[0]タイプを確認するにはどうすればよいですか?

+0

'オブジェクト[0]'言うのはそのハードその空のコレクションを意味するかもしれません。このオブジェクトはどこから来たのですか? –

+0

element.GetType()。FullNameはこの場合に何を返しますか? – RQDQ

+0

if文はあまり意味がないようです。この小切手を使用している理由を説明してください。 – Soviut

答えて

2

objectobject[]であることを確認するには、チェック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. 
     } 
    } 
} 

結果。

1

object[0]タイプはありません。それは、それがオブジェクトの空の配列だということです。

1

は、あなたが試してみました:

var test = element as IEnumerable; 

If (test != null && test.Any()) 
{ 
+0

--''''''---------私が持っている、と要素にGUIDであれば、それはIEnumerableを –

+0

@lであるように見えます「」「」「」「」「」「」いいえ、['Guid'](https://msdn.microsoft.com/en-us/library/system.guid(v = vs.110).aspx)は' IEnumerable'を実装していません。おそらくあなたはGuidを表すようになる['string'](https://msdn.microsoft.com/en-us/library/system.string(v = vs.110).aspx)を見ているでしょうか? 'string'は' IEnumerable'を実装します。 – hvd

+0

正しい!それは文字列だった。 –

関連する問題