fla*_*ome 2 .net c# environment-variables
我正在尝试使用返回 IDictionary 的 System.Environment.GetEnvironmentVariables() 获取所有环境变量的排序列表以进行日志记录。
根据文档 IDictionary 不提供任何排序功能: IDictionary Interface
IDictionary 接口允许枚举包含的键和值,但它并不暗示任何特定的排序顺序。
作为一种解决方法,我想出了这样的方法:
var dictionary = Environment.GetEnvironmentVariables();
var keyList = dictionary.Keys.OfType<string>().ToList();
keyList.Sort();
int maxKeyLen = keyList.Max(key => ((string)key).Length);
string logMessage = "";
foreach (string key in keyList)
{
logMessage =
logMessage +
Environment.NewLine +
(key + ": ").PadRight(maxKeyLen + 2) +
dictionary[key];
}
Console.WriteLine(logMessage);
Run Code Online (Sandbox Code Playgroud)
由于@canton7的解决方案,我将上面的代码更改为:
var sortedEntries = Environment.GetEnvironmentVariables().Cast<DictionaryEntry>().OrderBy(entry => entry.Key);
int maxKeyLen = sortedEntries.Max(entry => ((string)entry.Key).Length);
string logMessage = "";
foreach (var entry in sortedEntries)
{
logMessage =
logMessage +
Environment.NewLine +
(entry.Key + ": ").PadRight(maxKeyLen + 2) +
entry.Value;
}
Console.WriteLine(logMessage);
Run Code Online (Sandbox Code Playgroud)
Environment.GetEnvironmentVariables()返回一个非泛型IDictionary. IDictionaryimplements IEnumerable,即使在不阅读文档的情况下从接口中不清楚这一点,但在迭代它时获得的每个成员都是一个DictionaryEntry.
ADictionaryEntry基本上只是一个预泛型KeyValuePair<object, object>。
Linq 提供了两种从非泛型移动IEnumerable到泛型的方法IEnumerable<T>:Cast<T>()和OfType<T>()。在这种情况下,由于我们知道每个元素都是 a DictionaryEntry,因此我们可以使用Cast<DictionaryEntry>().
所以:
var entries = Environment.GetEnvironmentalVariables().Cast<DictionaryEntry>();
Run Code Online (Sandbox Code Playgroud)
现在我们有一个IEnumerable<DictionaryEntry>. 我们可以这样排序:
var sortedEntries = entries.OrderBy(x => (string)x.Key);
Run Code Online (Sandbox Code Playgroud)
或者我们可以将其变成KeyValuePair<string, string>第一个,以便更容易使用:
var entries = Environment.GetEnvironmentalVariables().Cast<DictionaryEntry>()
.Select(x => KeyValuePair.Create((string)x.Key, (string)x.Value));
var sortedEntries = entries.OrderBy(x => x.Key);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2381 次 |
| 最近记录: |