关于c#:更新string []中值的更好方法


Better way to update values in string[]

我正在寻找更新列表/数组中的值的更好方法:

我的密码就像-

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

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

1
2
3
4
5
6
7
8
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?


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

1
2
3
4
5
6
7
8
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关键字,您可以指定任意多个字符,而无需显式创建数组。

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

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


您可以使用扩展方法:

1
2
3
4
5
6
7
8
9
10
11
 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();
            }
        }    
    }

因此使用它:

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


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

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