在处理Web表单请求时,相同name值的数据会以逗号分隔的字符串形式提交到服务端,以下示例如何在C#中将此类字符串转换为实际需要的数据类型:
// 定义逗号分隔字符串
string value = "a,b,c,d";
// 获取泛型类型
Type type = typeof(T);
// 判断泛型是否为数组
if (type.IsArray)
{
// 将字符串以逗号拆分
string[] values = value.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
// 创建泛型对应的数组实例
Array array = (Array)Activator.CreateInstance(type, values.Length);
// 获取泛型数组元素类型
Type elementType = type.GetElementType();
// 将字符串逐个转换为泛型数组元素类型,并添加到数组对应索引处
for (int i = 0, length = values.Length; i < length; i++)
{
array.SetValue(Convert.ChangeType(values[i], elementType), i);
}
// 获取泛型数组
return (T)(object)array;
}
else
{
// 不是数组则直接尝试将字符串转换为泛型类型
return (T)Convert.ChangeType(value, type);
}