I often find myself investigating these class and their members and forgetting exactly what the member does. I'll locate a property or method that sounds like and is described (via comments) as something I would like to use; however, the comments are short and sweet and I must have a dozen questions pop in my mind. Note to self - create a framework for interactive library documentation . I digress... I'll typically create a quick console app an determine if the respective member is what I really need. This takes time - every time! So, I came up with a utility class...
The following is a informational utility class that builds a collection of key: value pair of the current environment. Fundamentally, all that this class does is abstract and enumerate the various members of the System.Environment class, puts the results into a list of key: value pairs, and provides a property that exposes the results.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq.Expressions;
/// <summary>
/// Environment List Class.
/// </summary>
public partial class EnvironmentList
{
#region Fields
#endregion Fields
#region Properties
/// <summary>
/// Gets the Environment Key: Value collection.
/// </summary>
/// <value>The items.</value>
public List<KeyValuePair<string, string>> Items { get; private set; }
#endregion Properties
#region Methods
/// <summary>
/// Builds the Environment dictionary/list.
/// </summary>
private void BuildDictionary()
{
this.Items.Add(new KeyValuePair<string, string>(ReflectionUtility.GetPropertyName(() => Environment.SystemDirectory), Environment.SystemDirectory));
this.Items.Add(new KeyValuePair<string, string>(ReflectionUtility.GetPropertyName(() => Environment.CurrentDirectory), Environment.CurrentDirectory));
this.Items.Add(new KeyValuePair<string, string>(ReflectionUtility.GetPropertyName(() => Environment.MachineName), Environment.MachineName));
this.Items.Add(new KeyValuePair<string, string>(ReflectionUtility.GetPropertyName(() => Environment.OSVersion), Environment.OSVersion.ToString()));
this.Items.Add(new KeyValuePair<string, string>(ReflectionUtility.GetPropertyName(() => Environment.Version), Environment.Version.ToString()));
this.Items.Add(new KeyValuePair<string, string>(ReflectionUtility.GetPropertyName(() => Environment.UserName), Environment.UserName));
this.Items.Add(new KeyValuePair<string, string>(ReflectionUtility.GetPropertyName(() => Environment.UserDomainName), Environment.UserDomainName));
this.Items.Add(new KeyValuePair<string, string>(ReflectionUtility.GetPropertyName(() => Environment.ProcessorCount), Environment.ProcessorCount.ToString()));
foreach (string name in Enum.GetNames(typeof(Environment.SpecialFolder)))
this.Items.Add(new KeyValuePair<string, string>(name, Environment.GetFolderPath((Environment.SpecialFolder)Enum.Parse(typeof(Environment.SpecialFolder), name))));
this.Items.Add(new KeyValuePair<string, string>("Logical Drives", string.Join("; ", Environment.GetLogicalDrives())));
ParseEnvironmentVariables(EnvironmentVariableTarget.Machine);
ParseEnvironmentVariables(EnvironmentVariableTarget.Process);
ParseEnvironmentVariables(EnvironmentVariableTarget.User);
}
/// <summary>
/// Parses the environment variables in the context of @target.
/// </summary>
/// <param name="target">The target.</param>
private void ParseEnvironmentVariables(EnvironmentVariableTarget target)
{
foreach (DictionaryEntry item in Environment.GetEnvironmentVariables(target))
{
this.Items.Add(new KeyValuePair<string, string>(item.Key.ToString(), item.Value.ToString()));
}
}
#endregion Methods
#region Event Handlers
#endregion Event Handlers
#region Ctors
/// <summary>
/// Initializes a new instance of the <see cref="EnvironmentList"/> class.
/// </summary>
public EnvironmentList()
{
this.Items = new List<KeyValuePair<string, string>>();
this.BuildDictionary();
}
#endregion Ctors
}
/// <summary>
/// Reflection Utility Class
/// <see cref="http://handcraftsman.wordpress.com/2008/11/11/how-to-get-c-property-names-without-magic-strings/"/>
/// </summary>
public static class ReflectionUtility
{
/// <summary>
/// Gets the name of the property.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="expression">The expression.</param>
/// <returns></returns>
public static string GetPropertyName<T>(Expression<Func<T>> expression)
{
MemberExpression body = (MemberExpression)expression.Body;
return body.Member.Name;
}
}Console:
EnvironmentList el = new EnvironmentList();
Array.ForEach(el.Items.ToArray(), i => Console.Out.WriteLine("{0}: {1}{2}", i.Key, i.Value, Environment.NewLine));Add a GridView to the markup and bind the grid on page load:
<asp:GridView runat="server" id="gv"/>
EnvironmentList el = new EnvironmentList(); this.gv.DataSource = el.Items; this.gv.DataBind();
Thanks for reading...
No comments:
Post a Comment