c# - 如何格式化复杂的 linq 表达式?
问题描述
我有一种怪物的linq
表达方式:
public static class HeaderOperators
{
public static IDictionary<string, string> GetValues(IReadOnlyList<string> keys, IHeaderDictionary headers, string defaultValue)
{
return keys.Select(x => x.ToLower()).Intersect(headers.Keys.Select(x => x.ToLower()))
.Select(k => new KeyValuePair<string, string>(k.ToLower(), headers[k.ToLower()]))
.Union(keys.Select(x => x.ToLower()).Where(k => !headers.Keys.Select(x => x.ToLower()).Contains(k.ToLower())).Select(k => new KeyValuePair<string, string>(k.ToLower(), defaultValue)))
.ToDictionary(p => p.Key.ToLower(), p => p.Value);
}
}
是否有任何工具可以很好地格式化它以使其可读?
或者,也许有一种更易于管理的语法?
解决方案
我会将其拆分为更具可读性:
public static class HeaderOperators
{
public static IDictionary<string, string> GetValues(IReadOnlyList<string> keys, IHeaderDictionary headers, string defaultValue)
{
var firstCollection = keys
.Select(x => x.ToLower()).Intersect(headers.Keys.Select(x => x.ToLower()))
.Select(k => new KeyValuePair<string, string>(k.ToLower(), headers[k.ToLower()]));
var secondCollection = keys
.Select(x => x.ToLower())
.Where(k => !headers.Keys.Select(x => x.ToLower()).Contains(k.ToLower()))
.Select(k => new KeyValuePair<string, string>(k.ToLower(), defaultValue));
return
firstCollection.Union(secondCollection).ToDictionary(p => p.Key.ToLower(), p => p.Value);
}
}
推荐阅读
- java - 如何在 Java / Android Studio 中将服务器的证书添加到客户端
- openlayers - API 文档 getFeaturesInExtent
- react-native - react-navigation:使用 Expo.addListener 在推送通知中导航的不变违规
- azure - 使用 Azure WebJobs 或 Azure Functions 托管与共享点在线列表集成的控制台应用程序
- php - 成功后不触发 table.ajax.reload():function()
- curl - 下载期间重命名重复文件名的卷曲选项
- r - R中大数的准确性
- tensorflow - 不能在单个图像上过拟合简单的卷积
- python - TensorFlow RuntimeError:在 SavedModel 中找不到与标签服务关联的 MetaGraphDef
- apache-kafka - Alpakka/Kafka - 分区消耗速度比其他分区快