System.Arrayを文字列に変換[
-
21-09-2019 - |
質問
string []に変換する必要があるSystem.Arrayがあります。これを行うには、アレイをループするだけで、各要素でトストリングを呼び出し、文字列に保存するよりも良い方法はありますか?問題は、実行時まで要素のタイプを必ずしも知っていないことです。
解決
Linqを使用してみませんか?
string[] foo = someObjectArray.OfType<object>().Select(o => o.ToString()).ToArray();
他のヒント
それは公正です Array
?それとも(たとえば)ですか object[]
?もしそうなら:
object[] arr = ...
string[] strings = Array.ConvertAll<object, string>(arr, Convert.ToString);
注リファレンスタイプの1D配列よりも注 object[]
(たとえば、実際にそうであっても、 Foo[]
)、しかしバリュータイプ(など int[]
)できない。だからあなたは試すことができます:
Array a = ...
object[] arr = (object[]) a;
string[] strings = Array.ConvertAll<object, string>(arr, Convert.ToString);
しかし、それがそのようなものである場合 int[]
, 、手動でループする必要があります。
使用できます Array.ConvertAll
, 、 このような:
string[] strp = Array.ConvertAll<int, string>(arr, Convert.ToString);
シンプルで基本的なアプローチ。
Array personNames = Array.CreateInstance(typeof (string), 3);
// or Array personNames = new string[3];
personNames.SetValue("Ally", 0);
personNames.SetValue("Eloise", 1);
personNames.SetValue("John", 2);
string[] names = (string[]) personNames;
// or string[] names = personNames as string[]
foreach (string name in names)
Console.WriteLine(name);
または、別のアプローチ:使用できます personNames.ToArray
それも:
string[] names = (string[]) personNames.ToArray(typeof (string));
これはおそらく圧縮される可能性がありますが、system.arrayタイプのオブジェクトでcast <>またはlinq selectを使用できないという制限を回避します。
Type myType = MethodToGetMyEnumType();
Array enumValuesArray = Enum.GetValues(myType);
object[] objectValues new object[enumValuesArray.Length];
Array.Copy(enumValuesArray, objectValues, enumValuesArray.Length);
var correctTypeIEnumerable = objectValues.Select(x => Convert.ChangeType(x, t));
所属していません StackOverflow