web-dev-qa-db-ja.com

オブジェクトの配列全体を文字列にキャストする

文字列であるタイプobjectの配列があります。それらを文字列に変換したいと思います。そうするための最も速い方法は何でしょうか?

例:私はこのobject[]を持っていて、これを変換したいので、これはstring[]です。

更新:問題は、object[]上のオブジェクトの一部が実際には整数のような他のオブジェクトであるということだと思います。最初にそれらを文字列に変換する必要があります。それをソリューションに含めてください。ありがとう。

17
Diskdrive

おそらくそれを行うための最も効率的な方法ではありません...オブジェクトが必ずしも文字列である必要がないときに機能するという利点があります。

string[] output = (from o in objectArray
                   select o.ToString()).ToArray()
12
cristobalito
object[] data = new object[] { "hello", "world", "!" };

string[] stringData = data.Cast<string>().ToArray();

オブジェクト配列に混合要素が含まれている場合は、ConvertAllArrayメソッドを使用できます。

object[] data = new object[] { "hello", 1, 2, "world", "!" };

string[] stringData = Array.ConvertAll<object, string>(data, o => o.ToString());
15
Dirk Vollmar
string[] output = Array.ConvertAll(objects, item => item.ToString());
13
Jaroslav Jandek
string[] myStringArray = myObjectArray.Cast<string>().ToArray();

または、varキーワードを使用している場合:

var myStringArray = myObjectArray.Cast<string>();

Castを使用しても、文字列のいずれかがnullの場合でも例外はスローされません。

3
James
 object[] objects;
 ..
 string[] result = Array.ConvertAll(objects, 
        new Converter<object, string>(Obj2string));
 public static string Obj2string(object obj)
 {
    return obj.ToString();
 }
1
Arseny

配列内のオブジェクトの一部が整数である場合、Enumerable.Castを使用することはできません。これを行うと、InvalidCastExceptionがスローされます。

var list = new object[] { "1", 1 };

list.Cast<string>();

代わりに、cristobalitoの答え、または同等のラムダ構文を試してください。

list.Select(o => o.ToString()).ToArray();
0
theburningmonk

すべてのオブジェクトはすでに弦であるため、ハードキャスト作業が行われます。より安全な方法は、以下を使用することです。

  private static void Conversions()
  {
     var strings = Convert(new object[] {"a", "b"});
     var strings2 = Convert(new object[] {});
  }

  private static string[] Convert(IEnumerable<object> objects)
  {
     return objects as string[] ?? new string[] {};
  }

この実装は常に文字列配列を返し、場合によっては空になります。クライアント側のコードはその仮定に基づいて実装でき、nullの戻り値をチェックする必要がなくなります。

0
Manfred
string[] str = new string[myObjects.Length];
for (int i = 0; i < myObjects.Length; ++i)
    str[i] = myObjects[i].ToString();

または:

List<string> lst = new List<string>();
foreach (object o in myObjects)
    list.Add(o.ToString());
return list.ToArray();
0
tdammers
object[] data = new object[] { "hello", "world", 1, 2 };

string[] strings = data.Select(o => o == null ? null : o.ToString()).ToArray();

クレイジーな質問の更新があります...

0
Codesleuth