C# 拆分字符串并转换为可为空的长字符串

C# 拆分字符串并转换为可为空的长字符串,c#,C#,我有以下代码,它拆分字符串,然后将值转换为long: string.IsNullOrEmpty(baIds) ? null : baIds.Split(',').Select(e => long.Parse(e)).ToList(), 我想要的是将这些值转换为可为null的long。 有什么帮助吗?请使用TryParse List<long?> result = null; if (!string.IsNullOrEmpty(baIds)) { long temp;

我有以下代码,它拆分字符串,然后将值转换为long:

string.IsNullOrEmpty(baIds) ? null : baIds.Split(',').Select(e => long.Parse(e)).ToList(),
我想要的是将这些值转换为可为null的long。
有什么帮助吗?

请使用
TryParse

List<long?> result = null;
if (!string.IsNullOrEmpty(baIds))
{
    long temp;
    result = baIds.Split(',').Select(e => long.TryParse(e, out temp) ? temp : (long?)null).ToList();
}
列表结果=null;
如果(!string.IsNullOrEmpty(baIds))
{
长温;
结果=baIds.Split(',')。选择(e=>long.TryParse(e,out temp)?temp:(long?)null.ToList();
}
你可以用这个

string.IsNullOrEmpty(baIds) ? null : baIds.Split(',').Select(e => (long?)long.Parse(e)).ToList(),

如果您只需要将其键入为
long?
,则只需在
中选择

Select(e => (long?)long.Parse(e))
如果您需要使用
null
来指示无法解析的内容,那么

Select(e => long.TryParse(e, out long r) ? r : default(long?))

这似乎是一个XY问题,为什么您首先需要可为空的long?如果我理解正确,您可以不返回
null
而尝试返回
default(long?
可能重复的
(e=>(long?)long.Parse(e))
,我会删除
long temp行,并改用
out var temp
。但我仍然不相信OP需要这么做。