将List <int>转换为字符串,反之亦然吗?

时间:2018-10-25 18:50:19

标签: c#

我已经看了几个小时,找不到一个简单的方法来做到这一点。我有一个整数列表,需要将其存储为字符串,以便可以将其发布到SQL Server。然后,我需要稍后将其从字符串转换回整数列表。最简单的方法是什么?

3 个答案:

答案 0 :(得分:6)

  

“用力,Linq!” -Obi Enum Kenobi

using System.Linq;

List<Int32> numbers = new List<Int32>()
{
    1,
    2,
    3,
    4
};

String asString = String
    .Join(
        ", ",
        numbers.Select( n => n.ToString( CultureInfo.InvariantCulture ) )
    );

List<Int32> fromString = asString
    .Split( "," )
    .Select( c => Int32.Parse( c, CultureInfo.InvariantCulture ) );

在由机器(而不是人类)读取的字符串之间进行转换时,重要的是避免使用ToStringParse而不使用CultureInfo.InvariantCulture来确保格式一致,无论用户的文化如何和格式设置。

FWIW,我有自己的帮助程序库,它添加了此有用的扩展方法:

public static String ToStringInvariant<T>( this T value )
    where T : IConvertible
{
    return value.ToString( c, CultureInfo.InvariantCulture );
}

public static String StringJoin( this IEnumerable<String> source, String separator )
{
    return String.Join( separator, source );
}

哪些东西可以整理一下

String asString = numbers
    .Select( n => n.ToStringInvariant() )
    .StringJoin( ", " );

List<Int32> fromString = asString
    .Split( "," )
    .Select( c => Int32.Parse( c, CultureInfo.InvariantCulture ) );

答案 1 :(得分:1)

字符串是您可以拥有的第二最差的格式。只有二​​进制稍微差一点。如果您有一个Int,请保持它为int。除非确实需要,否则请勿将任何内容转换为字符串(例如通过XML发送,请使用IO)。似乎不是这种情况。

我认为您想将它们转换为字符串以构建数据库查询的唯一原因。但是不要通过字符串连接来构建SQL查询。您只会这样做SQL Injections。使用SQL参数。如果这样做,则无需将它们转换为字符串。 SQL类和DBMS之间将进行可靠的传输。

如果由于某种原因SQL实际上将该数据存储为NVARCHARS:替换该数据库设计。没有理由让数据库将数字存储为字符串。在MS Access的这一方面,它都具有正确的“数字字段类型”。

答案 2 :(得分:-1)

最简单的方法是每次创建一个新列表,并在迭代时投射每个项目。