在参数内将list <string>转换为IEnumerable <guid>

时间:2019-05-12 08:18:25

标签: c#

我有一个名为GetContentPageToValueVo的函数,该函数接受IEnumerable<Guid>类型,这里的位置和服务的类型为list<string>,因此如何将参数中的这一行转换为IEnumerable类型,我的位置列表来自solr,并且具有有效的字符串格式的向导。

Location = ScHelper.Instance().GetContentPageToValueVo(x.Locations),
                Service = ScHelper.Instance().GetContentPageToValueVo(x.Services)

2 个答案:

答案 0 :(得分:1)

您可以同时使用LINQ Select方法和Guid.Parse来将List<string>转换为IEnumerable<Guid>

这里的Select将:

  

通过合并元素的索引,将序列的每个元素投影为新形式。

Guid.Parse将:

  

将GUID的字符串表示形式转换为等效的Guid结构。

因此您的代码将变为:

Location = ScHelper.Instance().GetContentPageToValueVo(x.Locations.Select(Guid.Parse)),
Service = ScHelper.Instance().GetContentPageToValueVo(x.Services.Select(Guid.Parse))

为了避免ArgumentNullException,您可以使用它:

Guid y;

Location = ScHelper.Instance().GetContentPageToValueVo(x.Locations.Where(x=>!string.IsNullOrWhiteSpace(x) && Guid.TryParse(x,out y)).Select(Guid.Parse)),
Service = ScHelper.Instance().GetContentPageToValueVo(x.Services.Where(x=>!string.IsNullOrWhiteSpace(x) && Guid.TryParse(x,out y)).Select(Guid.Parse))

答案 1 :(得分:0)

也许可行

if(x.Locations!=null)
    Location = ScHelper.Instance().GetContentPageToValueVo(x.Locations as IEnumerable<Guid>);
if(x.Services !=null)
                    Service = ScHelper.Instance().GetContentPageToValueVo(x.Services as IEnumerable<Guid>)