2009-05-13 4 views
0

私は、intとstring配列の内容を出力することによって、Webサービスを素早くデバッグしようとしています。一つの方法でこれをやろうとしているのですか?オブジェクトとプリミティブの両方を受け入れる汎用C#配列コンテンツプリンタを作成するにはどうすればよいですか?

私は

public static string ArrayToString(object[] array) 
{ 
    StringBuilder sb = new StringBuilder(); 

    foreach (Object item in array) 
    { 
     sb.Append(item.ToString()); 
     sb.Append(" "); 
    } 

    return sb.ToString(); 
} 

を試してみました。しかし、私がしようとするため、それが対象ではないにそれをプリミティブ配列(INT [])を送信する場合、これはチョーク。以下のメソッドにint型を送ることが

static void PrintObject(object obj) 
{ 
    Console.WriteLine(obj.ToString()); 
} 

を作品として、私は奇妙な見つける

は一つの方法でこれを行うにはとにかくはありますか私はちょうど男2つの別々のメソッドを作成しているつもりですか?


もちろん、配列を使用する必要があるかどうかは疑問ですが、Webサービスは既に使用されています。

も参照してください:

答えて

4
public static string ArrayToString<T>(T[] array) 
{ 
    StringBuilder sb = new StringBuilder(); 

    foreach (T item in array) 
    { 
     sb.Append(item.ToString()); 
     sb.Append(" "); 
    } 

    return sb.ToString(); 
} 

int[] x = new int[] { 1, 2, 3 }; 

string[] y = new string[] { "a", "b", "c" }; 

Console.WriteLine(ArrayToString(x)); 
Console.WriteLine(ArrayToString(y)); 
+0

私はこのソリューションがジェネリック医薬品の最高の使い勝手を好むと思います。私はこれを考えていたはずです。 –

1
private string PrintObjects<T>(IEnumerable<T> objs) 
{ 
    return string.Join(" ", objs.Select(o => o.ToString()).ToArray()); 
} 
4

はこのような何かを試してみてください:

static String toString<T>(IEnumerable<T> list) 
{ 
    StringBuilder sb = new StringBuilder(); 

    foreach (T item in list) 
    { 
     sb.Append(item.ToString()); 
     sb.Append(" "); 
    } 

    return sb.ToString(); 
} 

コンパイラは喜んであなたがこのように渡すリストの種類によってTの種類を推測します:

toString(new int[] { 1, 2, 3 }); 
toString(new String[] { "1", "2", "3" }); 
+0

作品、ジェネリック拡張メソッドを作ることができます。基本配列がIListを拡張することに気付かなかった。ありがとう。 –

+1

リストを変更したり、インデックス(IListの主な特徴)を変更する必要がないので、IEnumerableやICollectionを簡単に使うことができます。 – mquander

+0

@mquander、もう少し詳しく説明できますか? –

2

なぜあなたは配列を選んだのですか?あなたのコードは配列の特定のプロパティに依存せず、代わりにオブジェクトのリストを見るだけです。 IEnumerableをはより良い選択でしょう。そして、オブジェクトの事実上すべてのコレクション

public static string ArrayToString(IEnumerable source) 
{ 
    StringBuilder sb = new StringBuilder(); 

    foreach (Object item in source) 
    { 
     sb.Append(item.ToString()); 
     sb.Append(" "); 
    } 

    return sb.ToString(); 
} 
+0

私は同意しますが、Webサービスはすでに稼動しており、うまく機能しています。 –

+1

私はIEnumerable は、コレクションを反復するときに任意のボクシングを防ぐだろうと思います。 –

1

のためにこれを行うには、いくつかの方法がありますが可能になるように思えます。

あなたはLINQのを持っている場合、あなたは

int[] foo = new int[] {1,2,3,4}; 
ArrayToString(foo.Cast<Object>().ToArray()); 

を行い、その後、それを送ることができます。

それとも、あなたは素晴らしい

public static string ToString<T>(this IEnumerable<T> val) 
{ 
    StringBuilder sb = new StringBuilder(); 
    foreach(var item in val) 
    { 
     sb.Append(item.ToString()); 
     sb.Append(" "); 
    } 
    return sb.ToString(); 
} 
関連する問題