如何将字符串列表转换为 GUID 列表

22

我有下面这行代码,它创建了一个字符串列表。

List<string> tstIdss = model.Ids.Where(x => x.Contains(entityId)).Select(x => x.Split('_').First()).ToList();

我需要将它转换为Guid列表,即List<Guid> PermissionIds。

model.PermissionIds= Array.ConvertAll(tstIdss , x => Guid.Parse(x));

我尝试了上述方法,但是遇到了以下错误:model.PermissionIds 在我的模型类中被实现如下。

public List<Guid> PermissionIds { get; set; }

错误 3

>>The type arguments for method 'System.Array.ConvertAll<TInput,TOutput>(TInput[], System.Converter<TInput,TOutput>)' 
    cannot be inferred from the usage. 
    Try specifying the type arguments explicitly.   
3个回答

54
您可以使用 Linq 的 SelectToList 方法:
model.PermissionIds = tstIdss.Select(Guid.Parse).ToList();

或者你可以使用 List<T>.ConvertAll 方法:

model.PermissionIds = tstIdss.ConvertAll(Guid.Parse);

哦,对了,我真的不需要lambda表达式,呃。 - TJ Ellis
@Thomas Levesque,再确认一下,我有一个 "string entityId = entity",在这种情况下,我该如何将 'entityId' 转换为 Guid 类型?请。 - TheKingPinMirza
我明白了,应该是像“new Guid(entityId)”这样。如果我错了,请纠正我。 - TheKingPinMirza
1
@immirza,是的,你可以这样做。你也可以使用Guid.Parse(entityId) - Thomas Levesque
如果你想要做相反的操作,可以这样传递参数: var guidStringList = guidList.ConvertAll(g => g.ToString()); - Reap

9
我有一行代码,它创建了一个字符串列表。 我需要将其转换为 GUID 列表。
如果您的字符串列表可以安全地解析为 GUID,则建议使用 @Thomas Leveque 的答案。
如果您的字符串列表可能包含一些非 GUID,最好使用以下 TryParse:
Guid bucket = Guid.Empty;
model.PermissionIds = tstIdss.Where(x => Guid.TryParse(x, out bucket)).Select(x => bucket).ToList();

Where子句将过滤掉任何不能被格式化为Guid的字符串。

8

我不熟悉 ConvertAll,但是可以尝试使用 Select

model.PermissionIds = tstIdss.Select(s=>Guid.Parse(s)).ToList();

它不会抛出异常吗? - Janatbek Orozaly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接