string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
这行不通,因为split方法返回一个字符串[]
string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
这行不通,因为split方法返回一个字符串[]
当前回答
如果你正在使用c# 3.5,你可以使用Linq来实现这一点
string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(s=>int.Parse(s)).ToList();
还是短的那个
string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(int.Parse).ToList();
其他回答
如果你想包含一些简单的验证并跳过无效值(而不是抛出异常),这里有一些使用TryParse的东西:
string csv = "1,2,3,4,a,5";
int mos = 0;
var intList = csv.Split(',')
.Select(m => { int.TryParse(m, out mos); return mos; })
.Where(m => m != 0)
.ToList();
//returns a list with integers: 1, 2, 3, 4, 5
编辑:以下是根据Antoine的反馈更新的查询。它首先调用TryParse来过滤掉任何错误的值,然后再调用Parse来进行实际的转换。
string csv = "1,2,3,4,a,5,0,3,r,5";
int mos = 0;
var intList = csv.Split(',')
.Where(m => int.TryParse(m, out mos))
.Select(m => int.Parse(m))
.ToList();
//returns a list with integers: 1, 2, 3, 4, 5, 0, 3, 5
编辑2:c# 7.0的更新查询,感谢Charles Burns的反馈。注意,我们用这种方法去掉了额外的mos变量,所以它更简洁一些。
string csv = "1,2,3,4,a,5,0,3,r,5";
var intList = csv.Split(',')
.Where(m => int.TryParse(m, out _))
.Select(m => int.Parse(m))
.ToList();
如果你正在使用c# 3.5,你可以使用Linq来实现这一点
string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(s=>int.Parse(s)).ToList();
还是短的那个
string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(int.Parse).ToList();
string tags = "9,3,12,43,2";
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
我偶然发现了这个,我只是想分享我自己的解决方案没有linq。这是一种原始方法。非整数值也不会被添加到列表中。
List<int> TagIds = new List<int>();
string[] split = tags.Split(',');
foreach (string item in split)
{
int val = 0;
if (int.TryParse(item, out val) == true)
{
TagIds.Add(val);
}
}
希望这能有所帮助。
我修改了khalid13的答案。如果用户输入一个字符串“0”,他的回答将从结果列表中删除该字符串。我做了类似的事情,但使用了匿名对象。
var result = commaSeparatedString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(s => new { didConvert = int.TryParse(s.TrimNullProtection(), out convertedInt), convertedValue = convertedInt })
.Where(w => w.didConvert)
.Select(s => s.convertedValue)
.ToList();
TrimNullProtection是一个自定义函数,我做了保护,如果字符串为空。
上面所做的是剔除任何不能正确转换的字符串。如果转换存在问题,则需要报错,那么接受的答案应该是有用的。