我已经看了几个小时,找不到一个简单的方法来做到这一点。我有一个整数列表,需要将其存储为字符串,以便可以将其发布到SQL Server。然后,我需要稍后将其从字符串转换回整数列表。最简单的方法是什么?
答案 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 ) );
在由机器(而不是人类)读取的字符串之间进行转换时,重要的是避免使用ToString
和Parse
而不使用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)
最简单的方法是每次创建一个新列表,并在迭代时投射每个项目。