文字列であるタイプobject
の配列があります。それらを文字列に変換したいと思います。そうするための最も速い方法は何でしょうか?
例:私はこのobject[]
を持っていて、これを変換したいので、これはstring[]
です。
更新:問題は、object[]
上のオブジェクトの一部が実際には整数のような他のオブジェクトであるということだと思います。最初にそれらを文字列に変換する必要があります。それをソリューションに含めてください。ありがとう。
おそらくそれを行うための最も効率的な方法ではありません...オブジェクトが必ずしも文字列である必要がないときに機能するという利点があります。
string[] output = (from o in objectArray
select o.ToString()).ToArray()
object[] data = new object[] { "hello", "world", "!" };
string[] stringData = data.Cast<string>().ToArray();
オブジェクト配列に混合要素が含まれている場合は、ConvertAll
のArray
メソッドを使用できます。
object[] data = new object[] { "hello", 1, 2, "world", "!" };
string[] stringData = Array.ConvertAll<object, string>(data, o => o.ToString());
string[] output = Array.ConvertAll(objects, item => item.ToString());
string[] myStringArray = myObjectArray.Cast<string>().ToArray();
または、var
キーワードを使用している場合:
var myStringArray = myObjectArray.Cast<string>();
Cast
を使用しても、文字列のいずれかがnullの場合でも例外はスローされません。
object[] objects;
..
string[] result = Array.ConvertAll(objects,
new Converter<object, string>(Obj2string));
public static string Obj2string(object obj)
{
return obj.ToString();
}
配列内のオブジェクトの一部が整数である場合、Enumerable.Castを使用することはできません。これを行うと、InvalidCastExceptionがスローされます。
var list = new object[] { "1", 1 };
list.Cast<string>();
代わりに、cristobalitoの答え、または同等のラムダ構文を試してください。
list.Select(o => o.ToString()).ToArray();
すべてのオブジェクトはすでに弦であるため、ハードキャスト作業が行われます。より安全な方法は、以下を使用することです。
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の戻り値をチェックする必要がなくなります。
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();
object[] data = new object[] { "hello", "world", 1, 2 };
string[] strings = data.Select(o => o == null ? null : o.ToString()).ToArray();
クレイジーな質問の更新があります...