使用.DefaultIfEmpty()而不是.FirstOrDefault()?? 的String.Empty;

Eli*_*eth 14 c# linq

如何集成.DefaultIfEmpty()扩展方法,所以我不能使用

.FirstOrDefault() ?? String.Empty;
Run Code Online (Sandbox Code Playgroud)

码:

(from role in roleList
let roleArray = role.RoleId.Split(new char[] { WorkflowConstants.WorkflowRoleDelimiter })
where roleArray.Length.Equals(_SplittedRoleIdArrayLength) && 
      HasAccessToCurrentUnit(roleArray[_UnitIndexInRoleId])
select roleArray[_LevelIndexInRoleId]).FirstOrDefault() ?? String.Empty;
Run Code Online (Sandbox Code Playgroud)

ken*_*n2k 14

你可以使用:

var query = ...;

return query.DefaultIfEmpty(string.Empty).First();
Run Code Online (Sandbox Code Playgroud)

但这并没有降低IMO的复杂性.


Den*_*nko 6

如果您对扩展方法感兴趣,那么您可以使用以下内容:

public static class Helpers
{
    public static string FirstOrEmpty(this IEnumerable<string> source)
    {
        return source.FirstOrDefault() ?? string.Empty;
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑

这种方法不是通用的,因为我们必须使用default(T)null而不是给我们string.Empty.