using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
public class Test
{
public int[] intValues;
public static void Main()
{
string[] arrayData = { "20", "30", "40" };
FieldInfo f = typeof(Test).GetField("intValues");
Type t = f.FieldType.GetElementType();
Test test = new Test();
f.SetValue(test, GenericConvert.ChangeArrayType(arrayData, t));
Console.WriteLine("int values: {0}",
string.Join(", ", test.intValues.Select(v => v.ToString()))
);
}
}
public class GenericConvert
{
public static object ChangeArrayType<S>(IEnumerable<S> a, Type t)
{
MethodInfo methodDefinition = typeof(GenericConvert).GetMethod("ChangeArrayTypeGeneric");
MethodInfo method = methodDefinition.MakeGenericMethod(t, typeof(S));
return method.Invoke(null, new object[] { a });
}
public static T[] ChangeArrayTypeGeneric<T, S>(IEnumerable<S> a)
{
return a.Select(x => (T) Convert.ChangeType(x, typeof(T))).ToArray();
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5SZWZsZWN0aW9uOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIGludFtdIGludFZhbHVlczsKCQoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXN0cmluZ1tdIGFycmF5RGF0YSA9IHsgIjIwIiwgIjMwIiwgIjQwIiB9OwoJCUZpZWxkSW5mbyBmID0gdHlwZW9mKFRlc3QpLkdldEZpZWxkKCJpbnRWYWx1ZXMiKTsKCQlUeXBlIHQgPSBmLkZpZWxkVHlwZS5HZXRFbGVtZW50VHlwZSgpOwoJCVRlc3QgdGVzdCA9IG5ldyBUZXN0KCk7CgkJZi5TZXRWYWx1ZSh0ZXN0LCBHZW5lcmljQ29udmVydC5DaGFuZ2VBcnJheVR5cGUoYXJyYXlEYXRhLCB0KSk7CgkJCgkJQ29uc29sZS5Xcml0ZUxpbmUoImludCB2YWx1ZXM6IHswfSIsCiAgICAgICAgICAgIHN0cmluZy5Kb2luKCIsICIsIHRlc3QuaW50VmFsdWVzLlNlbGVjdCh2ID0+IHYuVG9TdHJpbmcoKSkpCiAgICAgICAgKTsKCX0KfQoKcHVibGljIGNsYXNzIEdlbmVyaWNDb252ZXJ0CnsKICAgIHB1YmxpYyBzdGF0aWMgb2JqZWN0IENoYW5nZUFycmF5VHlwZTxTPihJRW51bWVyYWJsZTxTPiBhLCBUeXBlIHQpCiAgICB7CiAgICAgICAgTWV0aG9kSW5mbyBtZXRob2REZWZpbml0aW9uID0gdHlwZW9mKEdlbmVyaWNDb252ZXJ0KS5HZXRNZXRob2QoIkNoYW5nZUFycmF5VHlwZUdlbmVyaWMiKTsKICAgICAgICBNZXRob2RJbmZvIG1ldGhvZCA9IG1ldGhvZERlZmluaXRpb24uTWFrZUdlbmVyaWNNZXRob2QodCwgdHlwZW9mKFMpKTsKICAgICAgICByZXR1cm4gbWV0aG9kLkludm9rZShudWxsLCBuZXcgb2JqZWN0W10geyBhIH0pOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgVFtdIENoYW5nZUFycmF5VHlwZUdlbmVyaWM8VCwgUz4oSUVudW1lcmFibGU8Uz4gYSkKICAgIHsKICAgICAgICByZXR1cm4gYS5TZWxlY3QoeCA9PiAoVCkgQ29udmVydC5DaGFuZ2VUeXBlKHgsIHR5cGVvZihUKSkpLlRvQXJyYXkoKTsKICAgIH0KfQ==