我有这个字符串:
string alertsId = "1,2,3,4";
然后我将字符串转换为整数列表:
List<int> list = alertsId.Split(',').Select(n => Convert.ToInt32(n)).ToList();
如何将上面的列表转换为可以为空的列表?
答案 0 :(得分:5)
一个List<int>
是一个引用类型,因此根据定义可以为空。所以我想你想创建一个可空整数列表(List<int?>
)。
您只需使用Cast<T>()
:
List<int?> nullableList = list.Cast<int?>().ToList();
或直接创建:
List<int?> list = alertsId.Split(',').Select(n => (int?)Convert.ToInt32(n)).ToList();
答案 1 :(得分:2)
定义一个函数:
public int? ParseToNullable(string s)
{
int? result = null;
int temp = 0;
if (int.TryParse(s, out temp))
{
result = temp;
}
return result;
}
然后像这样使用它:
string alertsId = "1,2,3,4";
List<int?> list = alertsId.Split(',').Select(n => ParseToNullable(n)).ToList();
答案 2 :(得分:0)
您可以列出Nullable列表并将列表中的每个元素复制到可以为空的元素中,如下例所示:
List<Nullable<int>> a = new List<Nullable<int>>();
List<int> b = new List<int> { 1, 3, 4 };
foreach (var c in b)
{
a.Add((Nullable<int>)c);
}
答案 3 :(得分:0)
我对linq派对的反应
string alertsId = "1,2,3,4,crap";
List<int?> list = alertsId.Split(',')
.Select(s => { int i; return int.TryParse(s, out i) ? i : (int?)null; })
.ToList();
首先我们用逗号分割,然后我们尝试解析每个元素,如果它不是可解析的,我们返回null,然后我们将我们一直使用的数组转换为列表。