2012-03-06 8 views
4

だから私は値がPHPますprint_r()関数の動作と同じように多くを渡された情報を出力している)(C#関数ますprint_rを書くしようとしています。ますprint_r()PHP関数

機能への入力としてオブジェクトに取って、それが何であるかの種類に応じている私は何をやっている、私は配列を介して出力値、またはループをよ、配列内の値をプリントアウト。私は基本的な価値観をプリントアウト何の問題もないが、私はそれが配列である検出した場合、私は、オブジェクトをループしようとすると、私はC#からエラーがエラー1つのforeach文はタイプので、 『オブジェクト』の変数を操作することはできません」と言って「オブジェクトを取得します'は' GetEnumerator 'のパブリック定義を含んでいません "。

オブジェクトはIEnumerable <を実装していないと仮定していますが、このオブジェクトを入力オブジェクトとして処理できる方法はありますか?

これは、関数(IEnumerableを<>の部分は、コンテンツの面で空白であるため、私の現在のコードであるが、これは私にエラーを与えているコードです。

感謝。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Collections; 
using System.Reflection; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void print_r(object val) 
     { 
      if (val.GetType() == typeof(string)) 
      { 
       Console.Write(val); 
       return; 
      } 
      else if (val.GetType().GetInterface(typeof(IEnumerable).FullName) != null) 
      { 
       foreach (object i in val) 
       { 
        // Process val as array 
       } 
      } 
      else 
      { 
       Console.Write(val); 
       return; 
      } 
     } 

     static void Main(string[] args) 
     { 
      int[] x = { 1, 4, 5, 6, 7, 8 }; 
      print_r(x); 
      Console.Read(); 
     } 
    } 
} 
+1

最初の結果を試してみてくださいhttp://bit.ly/x3tH6i – scibuff

+0

私が必要とするものはまったくありません。このトピック@scibuff –

+1

は、Googleで最初の結果です。 – dvdmn

答えて

5

valはObjectとして宣言されています。IEnumerable(これは図のようにisで簡単に実行できますが、これも元のコードでも動作します)を確認した後、明示的にキャストしなければなりません。

else if (val is IEnumerable) 
{ 
    var e = val as IEnumerable; 
    foreach (var i in e) 
    { 
     Console.WriteLine(i.ToString()); 
    } 
} 
+0

それはうまくいった!ありがとう。 –

0

Dump()拡張メソッドを持つがありますが、LINQPadでのみ使用できます。
任意のオブジェクトをhtmlにダンプしてブラウザに表示する独自の拡張メソッドを記述できます。
はあなたが私が思うに、これを行うためにリフレクションを使用する必要がありますLINQPad.exe

public static class Extension 
    { 
     public static void Dump<T>(this T o) 
     { 
      string localUrl = Path.GetTempFileName() + ".html"; 
      using (var writer = LINQPad.Util.CreateXhtmlWriter(true)) 
      { 
       writer.Write(o); 
       File.WriteAllText(localUrl, writer.ToString()); 
      } 
      Process.Start(localUrl); 
     } 
    } 
0

を参照する必要があり、私は似機能を必要と反射を使用して表に私のオブジェクトをouputted。

私はコードを手に入れませんでしたが、私の解決策の基礎を見つけましたhere