• 泛型中字符串转集合,(T)object,typeOf(T),LIst<T> xxx<T>();c# stringtolist


    要点:

    1. 泛型类型转换(T)后面只接受object类型;
    2. (T)后面接的object如果本身是string,则只能转换成string,否则应先进行类型转换。如:T为double,则应先将string转换为double,再将double转换为object后才可以返回值;
    3. 判断T类型只能通过两边都typeOf的格式,如:typeof(T) == typeof(int);
            #region 字符串转集合
            /// <summary>
            /// 字符串转集合
            /// 目前仅支持string和int类型
            /// </summary>
            /// <typeparam name="T">数据类型</typeparam>
            /// <param name="str">需要转换的字符串以“,”隔开</param>
            /// <returns>相应数据类型T的集合</returns>
            public static List<T> StrToList<T>(this string str)
            {
                List<T> lists = new List<T>();
                string[] strs;
                strs = str.Split(',');
                foreach (string s in strs)
                {
                    if (typeof(T) == typeof(int))
                    {
                        int n = int.Parse(s);
                        object obj = (object)n;
                        lists.Add((T)obj);
                    }
                    else if (typeof(T) == typeof(string))
                    {
                        object obj = (object)s;
                        lists.Add((T)obj);
                    }
                }
                return lists;
            }
            #endregion

     后面又看到有一位博友写的方法比我这个方法好,特转载,后面再学习:

    [C#小技巧收集]将字符串转换成List<T>

    有时需要将一个字符串分隔后,转换成指定类型的数组或List<T>,比如服务器端收到提交的一组checkbox的值,可能是一个ID串,类似:56,657,0,1,2,3,4,5,6,7,8,需要将它转成一个int数组或List<T>再进行后续处理。

    将字符串转换成List<T>中看到了关于这个的讨论,整理如下。

    我们可用Array.ConvertAll 泛型方法来实现,代码如下:

    string str = "56,657,0,1,2,3,4,5,6,7,8";
    int[] arrInt = Array.ConvertAll<string, int>(str.Split(','), s => int.Parse(s));
    foreach (int i in arrInt) Console.WriteLine(i);
    

    或者,我们想用到一些“奇技淫巧”,比如将这功能做成string的扩展方法:

    public static List<T> ToList<T>(this string str, char split, Converter<string, T> convertHandler)
    {
        if (string.IsNullOrEmpty(str))
        {
            return new List<T>();
        }
        else
        {
            string[] arr = str.Split(split);
            T[] Tarr = Array.ConvertAll(arr, convertHandler);
            return new List<T>(Tarr);
        }
    }
    

    调用方法:

    List<int> intList = str.ToList<int>(',', s => int.Parse(s));
    
  • 相关阅读:
    异常日志以及非异常日志记录方法
    oracle 监测数据库是否存在指定字段
    listview禁止双击一条之后选中复选框按钮的方法
    oracle 的rowid和rownum
    修改文件的名字的写法
    使用C#读取XML节点,修改XML节点
    BZOJ 1004: [HNOI2008]Cards
    P5022 旅行 (NOIP2018)
    P5021 赛道修建 (NOIP2018)
    P5020 货币系统 (NOIP2018)
  • 原文地址:https://www.cnblogs.com/swtool/p/SWTOOL_00023.html
Copyright © 2020-2023  润新知