关于C#中逗号分隔字符串转泛型数组的说明

在处理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);
}

发表评论