更新string []中值的更好方法

时间:2012-03-30 15:13:08

标签: c#

我正在寻找更新的List / Array中更新值的方法:

我的代码就像 -

String[] values = baseValue.Split(new []{'+'}); 

因为'values'可以有十进制/字符串值 - 我想更新此列表中的项目以删除小数后的任何值 -

for (int i = 0; i < values.Count(); i++)
{
    decimal newvalue;
    if (Decimal.TryParse(values[i], out newvalue))
    {
        values[i] = Decimal.ToInt32(newvalue).ToString();
    }
}

使用Linq /没有Linq有没有更好的方法来实现上述目标?

3 个答案:

答案 0 :(得分:3)

您可以使用字符串操作,而不是转换为decimal然后转换为int,最后返回string

string[] values = baseValue.Split('+');
for (int i = 0; i < values.Length; i++)
{
    int pos = values[i].IndexOf('.');
    if (pos >= 0) {
        values[i] = values[i].Substring(0, pos);
    }
}

原因是这里没有四舍五入。


String.Split有一个参数params char[] separator的重载。由于params关键字,您可以根据需要指定任意数量的字符,而无需显式创建数组。

string[] result = s.Split('x', 'y', 'z');

使用values.Length这是数组类型中内置的属性。 values.Count()是一个LINQ扩展方法,它枚举所有数组项,因此效率不高。

答案 1 :(得分:1)

您可以使用扩展方法:

 public static void ConvertDecimalToInts(this string[] values)
    {
        for (int i = 0; i < values.Count(); i++)
        {
            decimal newvalue;
            if (Decimal.TryParse(values[i], out newvalue))
            {
                values[i] = Decimal.ToInt32(newvalue).ToString();
            }
        }    
    }

并按原样使用:

        String[] values = baseValue.Split(new[] { '+' });
        values.ConvertDecimalToInts();

答案 2 :(得分:0)

Olivier的答案可能更好,因为它不需要三次转换,但如果您愿意,可以使用Linq执行此操作:

values = baseValue.Split('+')
                  .Select(v => Decimal.ToInt32(Decimal.Parse(v)).ToString());