使用 .NET 的Environment 类

虽然 .NET 应用程序一般都运行在基于 Windows 的机器上(Mono 提供非 Windows 系统的支持),但是 Windows 的版本和其它系统特征也有很多不同。例如,你可能需要访问当前机器名、文件夹图位置、操作系统版本、当前用户名等内容。.NET Framework 在 System 命名空间下的 Environment 类中为你提供了这些答案。

Environment 类分析

使用System.Environment类可以得到有关主机环境的信息,能得到的主机环境包括以下这些:


   

·         命令行参数

·         退出代码

·         环境变量设置

·         调用堆栈的内容

·         系统启动后的连续运行时间

·         执行引擎的版本

使用System.Environment类中包含的属性和方法可以访问这些信息。在给出代码示例之前,让我们先看一下这些属性和方法。首先看System.Environment类提供的方法:

·         Exit:中止当前的进程,并将进行退出代码设置为特定值。退出代码作为整型参数传递给该方法。

·         GetCommandLineArgs:该方法返回在命令行中指定的参数,返回类型为字符串数组。

·         GetEnvironmentVariable:该方法接受环境变量的名称作为参数,然后返回指定的环境变量的值(以字符串返回)。

·         GetEnvironmentVariables:该方法以IDictionary对象返回所有环境变量和它们的当前设置。

此外,System.Environment还提供以下属性:

·         CommandLine:只读字符串属性,返回当前进程在启动时在命令行输入的数据。

·         ExitCode:写读/写整型数值属性,该属性提供对进程的退出代码的访问。如果一个进程在退出时没有返回值,那么它就返回System.Environment.ExitCode。如果应该程序没有设置这个属性,那么它返回零。

·         HasShutdownStarted:只读布尔属性,指出一个应用程序是否已经启动了关闭的进程。

·         NewLine:只读字符串属性,返回当前平台的newline特性。

·         StackTrace:只读字符串属性,以字符串值返回调用堆栈的当前状态。

·         TickCount:只读整型数值属性,返回自系统启动后所经过的毫秒数。

·         Version:只读属性,返回当前的系统版本。它以一个 Version 对象的形式返回,其中包含了很多其它的属性。

这些属性和方法很容易使用。下面让我们用几个例子来分析一下它们。

操作系统版本

你可能会遇到过下面这种情况,就是非常需要知道当前操作系统的版本。下面这个例子就向你展示如何使用返回值的详细条目来判断当前系统的版本。


   


using System;
namespace BuilderExamples {
class Class1 {
[STAThread]
static void Main(string[] args) {
Version v;
Console.WriteLine("The current user is: " + Environment.UserName);
v = Environment.Version;
Console.WriteLine("Build: " + v.Build.ToString());
Console.WriteLine("Master: " + v.Major.ToString());
Console.WriteLine("Minor: " + v.Minor.ToString());
Console.WriteLine("Revision: " + v.Revision.ToString());
} } }

对应的 VB.NET 代码如下:

Imports System
Module Module1
Sub Main()
Dim v As Version
Console.WriteLine("The current user is: " + Environment.UserName)
v = Environment.Version
Console.WriteLine("Build: " + v.Build.ToString())
Console.WriteLine("Master: " + v.Major.ToString())
Console.WriteLine("Minor: " + v.Minor.ToString())
Console.WriteLine("Revision: " + v.Revision.ToString())
End Sub

返回的值依你的系统不同而变。我在自己的系统上运行得到下面这些值,Build 为 4322,Master 和 Minor 都是1,Revision 为2032,是我 Windows XP 机器的修订号。你可以参考 Version 对象的细节得到更多信息。

使用回车返回

为了返回正确的格式到输出上,显示输出通常要求回车。你可能知道系统的回车换行或者新行字符,所以使用 Environment 类能够帮助你保证使用了正确的值。下面这个例子使用这这一属性:


   


using System;
namespace BuilderExamples {
class Class1 {
static void Main(string[] args) {
String cr = Environment.NewLine;
String[] test = Environment.GetCommandLineArgs();
for (int x = 0; x < test.Length; x++) {
Console.Write(test[x] + cr);
} } } }

这个例子非常简单,但是却示范了如何使用平台的newline设置。虽然 Windows 机器是一致的,UNIX 系统有所不同;有了这个特性,转换到像 Mono 这类平台上应该不是问题。此外,这个例子还使用了作为程序(程序集)名的字符串数组的第一个值,示范了如何访问命名行参数。VB.NET 版本的代码如下:

Dim cr As String
Dim test() As String
Dim x As Integer
cr = Environment.NewLine
test = Environment.GetCommandLineArgs()
For x = 0 To (test.Length - 1)
Console.Write(test(x) + cr)
Next x

stacktrace

如果在运行应用程序时你遇到过异常,那么你可能已经熟悉了stacktrace的内容。stacktrace中的条目具有以下格式:

atFullClassName.MethodName(MethodParms) in FileName:lineLineNumber

下面是这行代码的具体意义:

·         FullClassName:完整的类名。

·         MethodName:方法名。

·         MethodParm:参数类型/名称(type/name)对的列表。每一对由一个逗号分开。

·         FileName:声明MethodName方法的源文件的名称。

·         LineNumber:指出调用堆栈中的指令在包含MethodName的源代码的文件中所处的行号。

下面这行 C# 代码示范了一个简单的调用,在没有错误时这行代码会显示一个stacktrace:

Console.WriteLine(Environment.StackTrace.ToString());

等价的 VB.NET 代码如下:

Console.WriteLine(Environment.StackTrace.ToString())

在我的机器上运行 VB.NET 代码得到的输出如下:

atSystem.Environment.GetStackTrace(Exception e)
at System.Environment.GetStackTrace(Exception e)
at System.Environment.get_StackTrace()
at BuilderStackTrace.Module1.Main() in C:/BuilderStackTrace/Module1.vb:line 6

了解你的环境

知道应用程序正在运行在的机器的环境细节通常是非常重要的。这些环境包括确定系统是否正在被关闭、环境变量的值以及命名行参数等。使用System.Environment能够很容易地获取这些值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值