将CSV字符串解析为整数数组

AAH*_*oot 0 c# csv arrays int parsing

我有一个文本框字段输入123,145,125我将这个字段分成一个整数数组.如果所有内容都被正确解析,则验证此字段是true还是false.

码:

private bool chkID(out int[] val) 
{
    char[] delimiters = new char[] { ',' };
    string[] strSplit = iconeID.Text.Split(delimiters);  


    int[] intArr = null;
    foreach (string s in strSplit) //splits the new parsed characters 
    {
        int tmp;
        tmp = 0;
        if (Int32.TryParse(s, out tmp))
        {
            if (intArr == null)
            {
                intArr = new int[1];
            }
            else
            {
                Array.Resize(ref intArr, intArr.Length + 1);
            }
            intArr[intArr.Length - 1] = tmp;
        }

        if (Int32.TryParse(iconeID.Text, out tmp))
        {
            iconeID.BorderColor = Color.Empty;
            iconeID.BorderWidth = Unit.Empty;

            tmp = int.Parse(iconeID.Text);
            val = new int[1];
            val[0] = tmp;
            return true;
        }


    }
    val = null;
    ID.BorderColor = Color.Red;
    ID.BorderWidth = 2;
    return false;
}
Run Code Online (Sandbox Code Playgroud)

//新代码:private bool chkID(out int [] val)// bool satus for checkID function {string [] split = srtID.Text.Split(new char [1] {','}); 清单编号=新清单(); int解析;

        bool isOk = true;
        foreach( string n in split){
            if(Int32.TryParse( n , out parsed))
                numbers.Add(parsed);
            else
                isOk = false;
        }
        if (isOk){
            strID.BorderColor=Color.Empty;
            strID.BorderWidth=Unit.Empty;
            return true;
        } else{
            strID.BorderColor=Color.Red;
            strID.BorderWidth=2;
            return false;
        }
            return numbers.ToArray();
        }
Run Code Online (Sandbox Code Playgroud)

Aus*_*nen 8

给定的功能似乎做得太多了.这是一个回答你的标题暗示的问题:

//int[] x = SplitStringIntoInts("1,2,3, 4, 5");

static int[] SplitStringIntoInts(string list)
{
    string[] split = list.Split(new char[1] { ',' });
    List<int> numbers = new List<int>();
    int parsed;

    foreach (string n in split)
    {
        if (int.TryParse(n, out parsed))
            numbers.Add(parsed);
    }

    return numbers.ToArray();
}
Run Code Online (Sandbox Code Playgroud)

编辑(根据您对问题的评论)

你已经定义了这个函数需要做的三件事.现在你只需要为每个创建方法.以下是我对如何实现它们的猜测.

int[] ValidateIDs(int[] allIDs)
{
    List<int> validIDs = new List<int>(allIDs);

    //remove invalid IDs

    return validIDs.ToArray();
}

void DownloadXmlData(int[] ids)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在您只需执行新功能:

void CheckIconeID(string ids)
{
    int[] allIDs = SplitStringIntoInts(ids);
    int[] validIDs = ValidateIDs(allIDs);

    DownloadXmlData(validIDs);
}
Run Code Online (Sandbox Code Playgroud)